java中 “==” 和 “equals”

77 阅读1分钟

直接看源码

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;//首先对两个值的引用进行判断,如果引用相等,那么值也就相等了。
}

如果引用不相等

  1. 判断传来的参数是否为 String 类型,不是则返回 false
  2. COMPACT_STRINGS 是一个静态布尔字段,表示字符串是否使用压缩模式。如果 COMPACT_STRINGSfalse,则跳过此检查。如果为 true,则进一步检查 this.coder 是否等于 aString.codercoder 字段表示字符串的编码方式,可能是 LATIN1 或 UTF16。只有当编码方式相同时,才有可能是相等的字符串。
  3. 最后调用方法进行字符遍历

总结

在 Obejct 类中,== 等价于 equals,其他类型都会进行 equals 重写,Integer 直接拆箱判断值是否相等,String 先判断是否为同一引用,如果不是,再判断字符是否相等。