直接看源码
1. Object 类
这是 object 中 equals 的代码, Object 直接比较对象的引用是否相等。
所以在判断 Object 对象是否相等时,直接使用 == 和调用 equals 是一样的。
2. Integer 类
Integer 类对方法进行了重写
obj instanceof Interger //判断是否为Integer类型
equals 方法会先判断你是否为 Integer 类,如果不是 return false 如果是 Integer 类型,那么就会直接转换为 int,也就是拆箱(换为 Integer 类型,再进行拆箱处理),最后判断值是否相等。所以 Integer 的 euqals
3. String 类
String 类也对 equals 方法进行了重写
if (this == anObject) {
return true;//首先对两个值的引用进行判断,如果引用相等,那么值也就相等了。
}
如果引用不相等
- 判断传来的参数是否为 String 类型,不是则返回 false
COMPACT_STRINGS是一个静态布尔字段,表示字符串是否使用压缩模式。如果COMPACT_STRINGS为false,则跳过此检查。如果为true,则进一步检查this.coder是否等于aString.coder。coder字段表示字符串的编码方式,可能是 LATIN1 或 UTF16。只有当编码方式相同时,才有可能是相等的字符串。- 最后调用方法进行字符遍历
总结
在 Obejct 类中,== 等价于 equals,其他类型都会进行 equals 重写,Integer 直接拆箱判断值是否相等,String 先判断是否为同一引用,如果不是,再判断字符是否相等。