Object o1 = new Object(); Object o2 = new Object(); //o1=o2; System.out.println(o1.equals(o2));
它返回false。true如果删除了注释,则可以返回。
false
true
为什么同一件事不适用于该String班级?
String
String s1=new String(); String s2=new String(); System.out.println(s1.equals(s2));
它返回true。为什么?(因为String使用实习生或其他涉及的东西?)
因为 String的equals() 比较内容,而不是对象本身。
公共布尔等于(Object anObject) 将此字符串与指定对象进行比较。当且仅当参数不为null且该String对象表示与此对象相同的字符序列时,结果为true 。
公共布尔等于(Object anObject)
将此字符串与指定对象进行比较。当且仅当参数不为null且该String对象表示与此对象相同的字符序列时,结果为true 。
/* String.equals() */ public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
(链接到String.equals()的源)
与 等于Object相等 :
类的equals方法Object在对象上实现了最有区别的对等关系。也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x == y具有值true)时,此方法返回true 。
Object
x
y
x == y
/* Object.equals() */ public boolean equals(Object obj) { return (this == obj); }
(链接到Object.equals()的源)
另外,请不要忘记equals()函数的约定:
equals()
equals方法对非null对象引用实现对等关系: 这是 自反的 :对于任何非null的参考值x,x.equals(x)应返回true。 它是 对称的 :对于任何非空引用值x和y,x.equals(y)当且仅当y.equals(x)返回true时,才应返回true。 它是 传递 性:对于任何非空的参考值x,y以及z,如果x.equals(y)回报率true和y.equals(z)回报率true,那么x.equals(z)应该返回true。 它是 一致的 :对于任何非null的引用值x和,只要不修改对象的equals比较中使用的信息y,就可以多次调用x.equals(y)一致返回true或一致返回false。 对于任何非null的参考值x,x.equals(null)应返回false。
equals方法对非null对象引用实现对等关系:
x.equals(x)
x.equals(y)
y.equals(x)
z
y.equals(z)
x.equals(z)
x.equals(null)