==和equals

== 对比的是栈中的值

如果是基本数据类型,栈中存变量值;如果是引用类型,栈中存的是堆中内存对象的地址

Object 的 equals 也是用 == 对比

1
2
3
public boolean equals(Object obj) {
return (this == obj);
}

String 继承 Object,为什么 String 的 equals 能对比到实际的值?

因为 String 的 equals 重写了,首先判断栈中地址是否相等,不想等则进一步判断字符串内容

1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}