Object o1 = new Object();
Object o2 = new Object();
//o1=o2;
System.out.println(o1.equals(o2));
它返回false
。它可以返回true
,如果评论被删除。
为什么同样的事情不适用于String
class?
String s1=new String();
String s2=new String();
System.out.println(s1.equals(s2));
它返回true
。为什么? (因为String
使用实习生或其他涉及的东西?)
Because 字符串的 equals() http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#equals%28java.lang.Object%29比较的是内容,而不是对象本身。
公共布尔等于(对象 anObject)
将此字符串与指定对象进行比较。当且仅当参数不为 null 并且是一个时,结果为 trueString
表示与此对象相同的字符序列的对象。
/* 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;
}
(链接到来源字符串.equals() http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.equals%28java.lang.Object%29)
与等于对象 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals%28java.lang.Object%29:
类的 equals 方法Object
在对象上实现最具辨别力的可能等价关系;也就是说,对于任何非空参考值x
and y
,此方法返回 true 当且仅当x
and y
引用同一个对象(x == y
有价值true
).
/* Object.equals() */
public boolean equals(Object obj) {
return (this == obj);
}
(链接到来源对象.equals() http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Object.java#Object.equals%28java.lang.Object%29)
另外,不要忘记合同equals()
功能:
equals 方法在非空对象引用上实现等价关系:
- It is 反射性的:对于任何非空参考值
x
, x.equals(x)
应该返回 true。
- It is 对称的:对于任何非空参考值
x
and y
, x.equals(y)
应该返回 true 当且仅当y.equals(x)
返回真。
- It is 及物的:对于任何非空参考值
x
, y
, and z
, if x.equals(y)
回报true
and y.equals(z)
回报true
, then x.equals(z)
应该返回true
.
- It is 持续的:对于任何非空参考值
x
and y
, 多次调用x.equals(y)
持续回报true
或持续返回false
,前提是对象的 equals 比较中使用的信息没有被修改。
- 对于任何非空参考值
x
, x.equals(null)
应该返回false
.
还推荐阅读:
- 对象.hashCode() http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#hashCode%28%29
- 有效的 Java (布洛赫) https://rads.stackoverflow.com/amzn/click/com/0321356683
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)