
定义 是Java中的比较运算符用于比较两个变量的值是否相等。对于基本数据类型比较的是实际值对于引用类型比较的是内存地址。equals() 是Object类的方法默认实现也是比较内存地址。但许多类如String、Integer等会重写equals()方法改为比较对象内容是否相等。和equals是java中比较核心区别在于 比较的是「内存地址」equals() 比较的是「对象内容」下面是两个的操作符定义那么比较和equalspublicclassTest{publicstaticvoidmain(String[]args){inta10;intb20;intc10;System.out.println(ab);//数值不相等输出结果是falseSystem.out.println(ac);//数值相等输出的结果为true//System.out.println(a.equals(b));//equals比较的是字符串StringAhello;StringBworld;StringChello;System.out.println(A.equals(B));//输出false字符串两个不相等System.out.println(A.equals(C));//输出true因为两个字符完全相等System.out.println(AC);//输出的为trueA 和 C 指向同一个内存地址}}A和C 的地址详细介绍 java栈和堆equals的方法重写publicclassStudent{publicStringname;publicintage;publicStudent(Stringname,intage){this.namename;this.ageage;}// 重写equals()按内容比较Overridepublicbooleanequals(Objecto){// 1. 地址相同直接返回trueif(thiso)returntrue;// 2. obj为null 或 类型不同返回falseif(onull||getClass()!o.getClass())returnfalse;// 3. 强转后比较内容Studentstudent(Student)o;returnagestudent.agename.equals(student.name);}publicstaticvoidmain(String[]args){Students1newStudent(张三,18);Students2newStudent(张三,18);Students3newStudent(李四,20);// 比较测试System.out.println(s1 s2: (s1s2));// false比较引用地址System.out.println(s1.equals(s2): s1.equals(s2));// true比较内容System.out.println(s1.equals(s3): s1.equals(s3));// false}}常见坑点避坑指南坑 1用 比较 String 内容❌ 错误if (str1 “hello”)✅ 正确if (str1.equals(“hello”))或 Objects.equals(str1, “hello”) 避免空指针坑 2比较时忽略 null❌ 错误str.equals(“hello”)str 为 null 时抛空指针✅ 正确“hello”.equals(str)常量在前或 Objects.equals(str, “hello”)坑 3自定义类重写 equals() 但不重写 hashCode()规则如果两个对象 equals() 返回 true它们的 hashCode() 必须相等反之不强制。后果若只重写 equals()将对象放入 HashMap/HashSet 时会出现逻辑错误。总结1.基本类型只用 比较数值equals() 不适用引用类型2. 比较「内存地址」判断是否为同一个对象equals() 默认同 重写后比较「对象内容」如 String/Integer/ 自定义类3.核心原则比较「内容」用 equals()比较「是否为同一对象」用 。