== 对比的是栈中的值
如果是基本数据类型,栈中存变量值;如果是引用类型,栈中存的是堆中内存对象的地址
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; }
|