Java对象都是继承自Object类,在Oject有一个有一个pulbic的equals方法
查看api可以发现此方法的解释是
boolean object.equals()
指示某个其他对象是否与此对象“相等”。
查看jdk1.5的源码是如下
public boolean equals(Object obj) {
return (this == obj);
}
也就是当我们写了一个自己的class,然后用class new了两个对象,如果在这两个对象上用equals时,此时比较的两个引用是不是一样,也就是他们的物理地址是不是一样,如果不一样的话,就会返回false.
我们实际用的时候,往往不是希望比较两个对象的物理地址是不是一样,而比较两个对象的属性等东西是不是一样,所以Object提供的方法往往不能满足我们要求。
这就需要我们覆盖Object的equals方法。
如果要覆盖Object的equals的方法,一定要满足以下几个等价关系:
1. 自反性,对于任何非null的引用值x,x.equals(x)必须反回true
2. 对称性,对于任何非null的引用值x,y,当且仅当y.equals(x)返回true时,x.equals(y),才返回true.
3. 传递性,对于任何非null的引用值x,y,z,如果x.equals(y)返回true,并且y.equals(z)返回ture,那么x.equals(z)也必须返回true.
4. 一致性,对于任何非null的引用值x,y,只要equals比较操作的两个对象中所用的信息没有被修改,多次调用x.equals(y)就会一致的返回true,或者一致的返回false.
5.对于任何的非null的值x,x.equals(null),必须返回false
如果我们的程序中没有完全遵守这些约定,那么你的程式就有可能发生问题。
那么有的人会问,我自己写的类没有覆盖这equals方法,或者equals方法没有完全符合上面的约定,但是我的程序却没有出任何问题。
没有出问题的原因是,因为你的程序没有地方 直接调用 或者 间接调用 equals方法。
什么是直接调用equals ,什么是间接调用equals呢?
直接调用equals方法就是说,你显式的在你的程序中对你自己的写的对象上面调用equals方法,
间接调用呢,用一简单的例子来说,当我们平常会把一个些对象放到collection,为了不重复,我们有调用collection的contains方法,此时就间接调用了collection中对象的equals方法。
覆盖了equals的类中,也必须覆盖hashCode方法
分享到:
相关推荐
`equals`方法的标准定义是在`java.lang.Object`类中,其签名是`public boolean equals(Object obj)`。这是一个重要的设计决策,因为这样可以确保任何对象都可以被传递给`equals`方法进行比较。然而,在实际开发过程...
本文将深入探讨`Object`类,以及其核心方法`equals()`与Java中的`==`操作符之间的差异。 `Object`类位于Java的核心库`java.lang`包中,它提供了基本的方法来支持对象的创建、比较和字符串表示。以下是`Object`类的...
在 Java 中,Object 类提供了两个重要的方法:equals 方法和 hashCode 方法。这两个方法都是用于比较两个对象是否相等的,但它们的实现机理和作用域却有所不同。 equals 方法是用于比较两个对象是否相同的。它的...
例如,public boolean equals(Object o) 是一个正确的重写方法,而 public boolean equals(String o) 是一个重载方法,而不是重写方法。 equals 方法的实现 ------------------------- equals 方法的实现需要遵循...
Java中的Object.equals和String.equals是两个不同的equals方法,它们之间的区别是非常重要的,理解这两个方法的区别对于我们编写高质量的Java代码非常重要。 首先,让我们来了解一下Java中的存储空间。Java中的存储...
但是,equals(Object) 方法的特殊之处在于它可以被覆盖。这意味着,我们可以通过覆盖 equals(Object) 方法来让它比较两个对象的内容,而不是它们的引用。许多类,如 java.lang.String,已经覆盖了 equals(Object) ...
接下来是`equals()`方法,它是Object类的一个实例方法,用于比较对象的内容。默认情况下,`equals()`方法的行为与`==`相同,即比较对象的引用。但是,很多类(如String、Integer等)都重写了`equals()`方法,使其...
了解并正确使用`Object`类的方法对于编写健壮、高效的Java程序至关重要。在设计和实现类时,根据需要重写`equals()`、`hashCode()`和`toString()`方法,以满足特定的业务需求。同时,理解线程同步方法`wait()`、`...
`equals`方法是Java语言中Object类的一个重要成员方法,其默认实现是比较两个对象的内存地址是否相同(即是否为同一个对象)。为了使对象之间能够基于内容进行比较,通常需要在具体的类中重写`equals`方法。 #### ...
`Object`类提供了处理对象的基本方法,如`toString()`(返回对象的字符串表示),`hashCode()`(返回对象的哈希值)和`equals()`(比较两个对象是否相等)。 2. **继承和多态**: `Object`类是所有类的父类,因此...
`Object`类提供了`equals`方法的默认实现,它仅比较对象的引用,也就是说,只有当两个对象是同一个实例时,`equals`才返回`true`。这对于值比较是没有意义的,因此在子类中,我们需要重写`equals`以进行值的比较。 ...
首先,`equals()` 方法是Object类中的一个基础方法,用于比较两个对象是否相等。默认情况下,它比较的是对象的内存地址,也就是引用是否相同。但在实际开发中,我们往往需要根据对象的内容来判断它们是否相等,这时...
这个方法在Java的Object类中定义,并且所有的Java类都默认继承了Object类,因此所有类的对象都可以使用`equals()`方法。`equals()`方法的初衷是检查两个对象的内容是否相等,而不仅仅是它们的引用是否相同。在Java...
equals 方法是 Object 类的方法,用于比较两个对象的值是否相等。对于基本数据类型,equals 方法不能用于比较,因为基本数据类型没有 equals 方法。 对于引用数据类型,equals 方法比较的是对象的值,而不是内存...
这个方法是Object类的一个成员,所有的Java类都默认继承自Object。默认情况下,`equals()`方法的行为与`==`一样,即比较对象的引用。然而,为了实现更复杂的逻辑,比如比较对象的内容而不是引用,通常需要重写`...
在Java编程中,`Object#equals()`方法是用于比较两个对象是否相等的标准方式,但它的性能可能并不总是满足高效容器类中元素搜索的需求。这篇博客"代替Object#equals() - 加速在容器类中搜索元素速度的可能性"探讨了...
equals 方法是 Java 中一个非常重要的方法,因为它是 Object 类中的一个基本方法,每个对象都可以根据自己的需求来重写这个方法。 三、hashCode 和 equals 方法的关系 hashCode 和 equals 方法之间存在着紧密的...
### Java中的`==`与`equals`方法的区别详解 在Java编程中,比较对象的相等性是一个常见的需求,但很多初学者对于`==`运算符与`equals`方法的区别容易混淆。本文将深入探讨两者之间的差异,以及它们在不同场景下的...
首先,`equals()`方法是Java Object类中的一个方法,它的默认行为是基于对象的引用进行比较,即如果两个对象引用指向同一个内存地址,那么`equals()`返回`true`,否则返回`false`。然而,当我们在自定义类中重写`...
这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用场景,我们通常需要在自定义类中重写这些方法,以满足特定的需求。 `equals()`方法主要用于比较两个对象...