千家信息网

Java中==和equals()的区别有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. ==== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类
千家信息网最后更新 2026年10月31日Java中==和equals()的区别有哪些

小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1. ==

== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中

1.1 基本数据类型

Java基本数据类型共有八种,可以分为三类

  • 字符类型char

  • 布尔类型boolean

  • 数值类型byte、short、int、long、float、double

这里有个例外,boolean不参与数值运算

int a1 = 10;int a2 = 10;System.out.println(a1==a2);  //truefloat a3 = 5.0f;float a4 = 5.0f;System.out.println(a3==a4);  //true……

上面给出几组示例,相同数据类型可以相互比较不用多说了,那么不同数据类型呢?

int a1 = 10;byte b1 = 10;System.out.println(a1==b1);  //truechar c1 = 'A';int c2 = 65;System.out.println(c1 == c2);  //trueint a1 = 10;double d1 = 10.0d;System.out.println(a1==d1);  //trueint a1 = 10;char e1 = 10;System.out.println(a1==e1);  //true

可以看到,在基本数据类型的范围内,不同数据类型也是可以直接比较的

如果比较的是基本数据类型,就是判断两个保存的数据是否相同(不一定类型相同)

1.2 引用数据类型

这里先写一个Student类,用于参考

public class Student {    public String name;    public int age;    public Student(){}    public Student(String name, int age){        this.name = name;        this.age = age;    }}

实例化两个Student对象,判断是否相等

Student student1 = new Student("Tom", 18);Student student2 = new Student("Tom", 18);System.out.println(student1==student2);  //false

注意,这里出现了示例中的第一个false。可以看到,即使赋的值是相同的,但使用==判断的结果为false,这是因为两个对象在内存中不指向同一地址。

如果比较的是引用类型,就是比较两个变量是否代表同一对象实体,也就是是否指向同一地址

1.3 小结

==是运算符
可以使用在基本数据类型变量和引用数据类型变量中
如果比较的是基本数据类型,就是判断两个保存的数据是否相同,不一定类型相同
如果比较的是引用类型,就是比较两个变量是否代表同一对象实体,也就是是否指向同一地址

2. equals

equals()是方法,只能用于引用数据类型

还是使用上面介绍到的Student对象,如果使用equals比较,那么?

Student student1 = new Student("Tom", 18);Student student2 = new Student("Tom", 18);System.out.println(student1.equals(student2));  //false

答案还是false,我们可以看一下在此处使用的equals的源码

使用的正是Object中的equals()方法(继承),而Object中的equals()方法也是使用的==进行的比较

Object类中equals()和==的作用相同

诶,部分同学可能想说了,这个equals()和我们平时用的不太一样啊,平时用的equals()好像是用来比较数值的。这里我们拿String类来举例。

String str1 = new String("cun");String str2 = new String("cun");System.out.println(str1==str2);  //falseSystem.out.println(str1.equals(str2));  //true

使用==比较,不出意外是false。而这里使用equals(),得到的结果是true。我们看一下这里的equals()源码(Java8版本)

可以看到,String类中的equals()重写了Object类中的equals(),这里侧重于具体的数值比较(我们日常使用中也是更希望比较具体的数值)。分析一下源码,这里先使用==进行比较,然后判断是否为String的一个示例,判断长度是否相等,最后挨个判断字符是否相等。

源码的大部分程序都比较好理解,有些人比较迷惑这里的强制转换(如下图),既然前一句判断了是否为String类的实例,后一句为什么还要强转?这是因为,在Java中,代码从编写到执行要经历两个过程--编译和执行,在执行时,程序判断了实参是否为String类的实例对象,之后不再需要强转;但是在编译中,即使经历了instanceof判断,编译器还是会始终把传进来的参数当作Object类型,而Object类型是没有value属性的,会直接报错。所以在这里如果不强转,编译都通不过,更不用说执行了。

类似的,我们可以写出Student类中重写的equals()方法。

不过现在因为类使用的非常多,一方面是因为每个类都添加比较繁琐,另一方面我们可能写的可能不够健壮,这里提供两种方式自动提供equals()的重写

IDEA编译器的快捷键"alt + insert",选择如下图的选项

选择需要添加到equals()的属性

可以看到自动生成的程序

@Overridepublic boolean equals(Object o) {    if (this == o) return true;    if (o == null || getClass() != o.getClass()) return false;    Student student = (Student) o;    return age == student.age &&        Objects.equals(name, student.name);}

导入lombok包,加入Data注解

@Datapublic class Student {    public String name;    public int age;    public Student(){}    public Student(String name, int age){        this.name = name;        this.age = age;    }}

可以看到重写了Object类中的equals()方法

3. 总结

        /**     * ==是运算符,equals是方法     * 1. ==     *      可以使用在基本数据类型变量和引用数据类型变量中     *      如果比较的是基本数据类型,就是判断两个保存的数据是否相同,不一定类型相同     *      如果比较的是引用类型,就是比较两个变量是否代表同一对象实体,也就是是否指向同一地址     *     * 2. equals     *      只能适用于引用数据类型     *      Object类中equals()和==的作用相同     *      像String、Data、File、包装类等中的equals都是重写了Object类中的equals()方法,比较的是实体内容是否相同     */

看完了这篇文章,相信你对"Java中==和equals()的区别有哪些"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

类型 数据 相同 两个 变量 对象 方法 就是 数值 编译 地址 实体 指向 源码 运算 也就是 代表 实例 示例 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 盈实互联网科技 智能科技公司是互联网公司吗 科技信息互联网 易互联网科技有限公司 互联网科技集团 紫鲸互联网科技 科技伦理 互联网公司 联恩商钥互联网科技有限公司 四个字互联网科技公司取名 新华互联网科技2019 中国的互联网科技企业的崛起 互联网科技实习生岗位职责 互联网和黑科技的看法 速维有品互联网信息科技(苏州)有限公司 互联网在线教育科技创业 世界互联网领先科技成果获奖 启辰互联网科技 有人说阿里系是互联网科技企业 山东大美朱楼互联网科技有限公司 武汉亿视互联网科技有限公司 伟宏互联网科技 互联网最新的科技 阿里巴巴算科技企业还是互联网 福州新华互联网科技学校 知乎 银川新华互联网科技职业技术培训学校图片 知域互联网科技有限公司大骗子 米聚互联网科技南京有限公司排面 亳州好赞互联网科技有限公司 互联网金融科技展 世界互联网领先科技成果获奖
0