== 和 equals 的区别是什么?

叁歲伎倆 2023-09-28 11:28 303阅读 0赞

==:运算符,用于比较基础类型变量和引用类型变量。

对于基础类型变量,比较的变量保存的值是否相同,类型不一定要相同。

  1. short s1 = 1; long l1 = 1;
  2. // 结果:true。类型不同,但是值相同
  3. System.out.println(s1 == l1);

对于引用类型变量,比较的是两个对象的地址是否相同。

  1. Integer i1 = new Integer(1);
  2. Integer i2 = new Integer(1);
  3. // 结果:false。通过new创建,在内存中指向两个不同的对象
  4. System.out.println(i1 == i2);

equals:Object 类中定义的方法,通常用于比较两个对象的值是否相等。

equals 在 Object 方法中其实等同于 ==,但是在实际的使用中,equals 通常被重写用于比较两个对象的值是否相同。

  1. Integer i1 = new Integer(1);
  2. Integer i2 = new Integer(1);
  3. // 结果:true。两个不同的对象,但是具有相同的值
  4. System.out.println(i1.equals(i2));
  5. // Integer的equals重写方法
  6. public boolean equals(Object obj) {
  7. if (obj instanceof Integer) {
  8. // 比较对象中保存的值是否相同
  9. return value == ((Integer)obj).intValue();
  10. }
  11. return false;
  12. }

两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

不对。hashCode() 和 equals() 之间的关系如下:

当有 a.equals(b) == true 时,则 a.hashCode() == b.hashCode() 必然成立,

反过来,当 a.hashCode() == b.hashCode() 时,a.equals(b) 不一定为 true。

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ==equals()有什么区别

    1.基本数据类型和引用数据类型==的比较作用效果是不同的 1)基本数据类型 = =比较的是值是相同 2)引用数据类型 = =比较的是引用的地址是都相同 2.equa