我有一个问题 我有两个空对象,我使用equals()方法来比较它们,因为我们知道equals方法比较一个Object的内容,但在这种情况下我没有任何属性到我的对象
Object ob1 = new Object();
Object ob2 = new Object();
if(ob1.equals(ob2)){
System.out.println(" they are Equal");
}
else{
System.out.println("not equal");
}
if(ob1 == ob2){
System.out.println(" they are Equal");
}
else{
System.out.println("not equal");
}
我们知道==将比较对象的引用
什么等于方法比较?
提前感谢...
答案 0 :(得分:3)
来自Object.equals JavaDoc:
类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。
答案 1 :(得分:2)
它还会比较参考文献,如here所述:
equals方法在非null对象引用上实现等价关系:
它是自反的:对于任何非空参考值x,x.equals(x)应该返回true。
它是对称的:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。 它是传递性的:对于任何非空引用值x,y和z,如果x.equals(y)返回true而y.equals(z)返回true,则x.equals(z)应返回true。 /> 它是一致的:对于任何非空引用值x和y,x.equals(y)的多次调用始终返回true或始终返回false,前提是没有修改对象的equals比较中使用的信息。
对于任何非空引用值x,x.equals(null)应返回false。
答案 2 :(得分:1)
如果两个对象都是null
,那么
if(ob1==null && ob2==null)
如果您尝试ob1.equals(null)
,您将获得NullPointerException
。因为ob1是自我null
。
答案 3 :(得分:0)
==运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。
- 醇>
equals()方法主要目的是比较两个对象的状态或对象的内容。
但您使用的是Object
类equals()
方法。
equals()方法的对象类默认实现类似于==,意味着如果它们指向同一位置,它将检查对象的内存引用。
注意: 重写此默认实现以在String,Wrapper类等类中进行内容比较。
答案 4 :(得分:0)
虽然X.equals(Y)
应该是什么意思不一致(即应该回答什么“问题”),但有两个有用的问题是:
如果按预期使用对象,是否应该将对X
的引用替换为引用Y
,以免改变其行为?
当按预期使用对象时,会将对X
的所有引用交换为Y
,,反之亦然 ,预计不会改变他们的行为?
如果Object
定义hashCode()
为所有空对象返回相同的值,并且equals
在将任何两个空对象相互比较时返回true,则这些定义将满足# 1。另一方面,任何定义equals
以测试引用相等性而hashCode
返回identityHashCode
的对象也 满足#1(如果X
Y
是不同的实例,X.equals(X)
为真但Y.equals(X)
为假的事实本身就是将对象视为不同的充分理由。
虽然Object
是否应该是具体类型值得商榷,但{em>仅使用Object
实例作为身份令牌。因此,Object
是具体类型的事实意味着其equals
方法应该测试身份。