java比较空对象
我有一个问题 我有两个空对象,我使用equals()方法来比较它们,因为我们知道equals方法比较对象的内容,但在这种情况下,我的对象没有任何属性
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");
}
我们知道==将比较对象的引用
equals方法在这里比较什么
先谢谢你
# 1 楼答案
虽然关于
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
是否应该是一种具体类型仍有争议,但仅使用Object
实例作为身份标记。因此,Object
是一个具体类型的事实意味着它的equals
方法应该测试身份# 2 楼答案
从Object.equalsJavaDoc:
类对象的equals方法在对象上实现了最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x==y的值为true)时,此方法才返回true
# 3 楼答案
它还将比较引用,如here所述:
# 4 楼答案
但是您正在使用
Object
classequals()
方法注: 此默认实现被重写,以便在诸如字符串、包装器类之类的类中进行内容比较
# 5 楼答案
如果两个对象都是
null
,那么如果你尝试做
ob1.equals(null)
,你会得到NullPointerException
。自ob1以来,它自身null