文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 中 == 和 equals 的区别究竟有哪些?(java中==和equals的区别是什么)

极客之心

极客之心

2024-12-24 08:26

关注

在 Java 编程中,== 和 equals 是两个常用的操作符,用于比较对象的值或引用。虽然它们都用于比较,但在使用上存在一些重要的区别。

一、== 操作符

== 操作符用于比较两个变量的值是否相等。对于基本数据类型(如 int、double、char 等),== 比较的是它们的值是否相等。例如:

int a = 10;
int b = 10;
System.out.println(a == b);  // 输出 true,因为 a 和 b 的值相等

对于引用数据类型(如对象),== 比较的是两个变量所引用的对象是否是同一个对象,即它们在内存中的地址是否相同。例如:

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);  // 输出 false,因为 str1 和 str2 是两个不同的对象,它们在内存中的地址不同

需要注意的是,对于字符串常量,Java 会在字符串常量池中维护一份字符串的副本。如果两个字符串常量的值相同,它们在字符串常量池中指向同一个对象。例如:

String str3 = "Hello";
String str4 = "Hello";
System.out.println(str3 == str4);  // 输出 true,因为 str3 和 str4 指向字符串常量池中同一个 "Hello" 对象

二、equals 方法

equals 方法是 Object 类的一个方法,用于比较两个对象的内容是否相等。在 Object 类中,equals 方法默认比较的是两个对象的引用是否相等。但是,许多 Java 类重写了 equals 方法,以实现基于对象内容的比较。

例如,String 类重写了 equals 方法,用于比较两个字符串的内容是否相等,而不是比较它们的引用。以下是一个示例:

String str5 = new String("Hello");
String str6 = new String("Hello");
System.out.println(str5.equals(str6));  // 输出 true,因为 str5 和 str6 的内容相等

对于自定义的类,如果需要比较对象的内容而不是引用,也应该重写 equals 方法。在重写 equals 方法时,需要遵循以下约定:

  1. 自反性:对于任何非 null 引用值 x,x.equals(x) 都应该返回 true。
  2. 对称性:对于任何非 null 引用值 x 和 y,如果 x.equals(y) 返回 true,那么 y.equals(x) 也应该返回 true。
  3. 传递性:对于任何非 null 引用值 x、y 和 z,如果 x.equals(y) 返回 true,y.equals(z) 返回 true,那么 x.equals(z) 也应该返回 true。
  4. 一致性:对于任何非 null 引用值 x 和 y,只要 equals 方法的比较操作在对象中所用的信息没有被修改,多次调用 x.equals(y) 应该始终返回 true 或始终返回 false。
  5. 对于任何非 null 引用值 x,x.equals(null) 都应该返回 false。

以下是一个自定义类的示例,重写了 equals 方法:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = 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 类重写了 equals 方法,比较两个 Person 对象的 name 和 age 是否相等。

三、总结

== 操作符用于比较基本数据类型的值和引用数据类型的引用是否相等。

equals 方法用于比较对象的内容是否相等,通常需要在自定义类中重写该方法。

在使用 == 和 equals 时,需要根据具体的情况选择合适的操作符或方法。如果需要比较基本数据类型的值,应该使用 == 操作符;如果需要比较对象的内容,应该重写 equals 方法并使用 equals 方法进行比较。

总之,理解 == 和 equals 的区别对于编写正确的 Java 代码非常重要。在比较对象时,应该根据实际需求选择合适的比较方式,以避免出现意外的结果。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯