目 录CONTENT

文章目录

equals 和 == 的区别

陌念
2023-02-13 / 0 评论 / 0 点赞 / 22 阅读 / 0 字
温馨提示:
本文最后更新于2024-07-09,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

a==ba.equals(b)有什么区别?先说结论:

  • 如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才返回 true。

  • 而 a.equals(b) 是进行逻辑比较,当内容相同时,返回true,所以通常需要重写该方法来提供逻辑一致性的比较。

a==ba.equals(b)在比较对象时有着不同的作用。

  1. 当使用 a==b 进行比较时,它实际上比较的是两个对象的引用。也就是说,它检查的是两个对象是否指向内存中的同一个地址。只有当ab指向的是堆中的同一个对象时,a==b 才会返回 true。例如:

    String a = new String("hello");
    String b = new String("hello");
    System.out.println(a == b); // false,a 和 b 指向不同的对象

    虽然值相同,但不是指向同一个引用,所以为 false

  2. 而当使用 a.equals(b) 进行比较时,它实际上比较的是两个对象的内容。也就是说,它会调用对象的 equals 方法来进行逻辑比较。通常情况下,需要重写 equals 方法来提供逻辑一致性的比较。例如:

    public class Person {
        private String name;
        private int age;
    
        // 省略构造方法和其他代码
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null || getClass() != obj.getClass()) {
                return false;
            }
            Person person = (Person) obj;
            return age == person.age && Objects.equals(name, person.name);
        }
    }
    
    Person p1 = new Person("Alice", 25);
    Person p2 = new Person("Alice", 25);
    System.out.println(p1.equals(p2)); // true,p1 和 p2 的内容相同

PS:需要注意的是,当重写 equals 方法时,通常也需要重写 hashCode 方法,以确保对象在放入哈希表等数据结构时能够正确工作。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  3. QQ打赏

    qrcode qq

评论区