对象比较应使用equals()方法而非==,因==比较引用地址;重写equals()需满足自反性、对称性、传递性、一致性,且与null比较返回false;同时应重写hashCode()以保证相等对象具有相同哈希码,确保集合类正常工作。

在Java中,对象的比较不能直接使用==运算符来判断两个对象的内容是否相等,因为==比较的是引用地址,即是否指向同一个对象实例。要比较对象的实际内容,应使用equals()方法。
使用 equals() 方法进行内容比较
Object类中的equals()方法默认也是比较引用地址,但很多类(如String、Integer、List等)都重写了该方法,用于比较对象的实际内容。
例如:
String str1 = new String("hello");String str2 = new String("hello");System.out.println(str1 == str2); // false,引用不同System.out.println(str1.equals(str2)); // true,内容相同
如果你自定义了一个类,比如Person,需要根据业务逻辑重写equals()方法,才能正确比较两个对象是否“相等”。
立即学习“Java免费学习笔记(深入)”;
重写 equals() 的注意事项
当重写equals()方法时,应遵循Java规范中的约定,确保满足以下条件:
采用HttpClient向服务器端action请求数据,当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。 实现Android与服务器端数据交互,我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,
- 自反性:x.equals(x) 应返回 true
- 对称性:如果 x.equals(y) 为 true,则 y.equals(x) 也应为 true
- 传递性:如果 x.equals(y) 和 y.equals(z) 都为 true,则 x.equals(z) 也应为 true
- 一致性:多次调用结果不变,只要对象未被修改
- 与 null 比较应返回 false:x.equals(null) 应返回 false
通常建议使用IDE生成或手动编写包含关键字段的比较逻辑。例如:
@Overridepublic boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person person = (Person) obj; return Objects.equals(name, person.name) && Objects.equals(age, person.age);}
配合 hashCode() 使用
如果重写了equals(),还应同时重写hashCode()方法,以保证在HashMap、HashSet等集合中能正常工作。两个相等的对象必须具有相同的哈希码。
可以使用Objects.hash(...)来简化hashCode()的实现。
基本上就这些。对象比较用equals(),必要时重写它,并记得同步处理hashCode()。不复杂但容易忽略细节。









