Java 中equals 的用法和疑问 ?
对于equals 我的理解是,比较两个对象的属性是否相同,
String str1 = new String("asd"); String str2 = new String("asd"); System.out.println(str1.equals(str2));
这个时候返回值是true。可是今天看了http://www.oschina.net/question/82993_75533
package test; class Employee { private Integer id; private String firstname; private String lastName; private String department; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } } public class EqulasTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Employee e1 = new Employee(); Employee e2 = new Employee(); e1.setId(100); e2.setId(100); System.out.println(e1.equals(e2)); // 返回值为false } }这是为什么?请高手解答
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
你要重写equals方法, 自己写比较逻辑..
equals跟==不同.
所有类都默认继承Object类
Object类中有equals方法 去看下 那个方法怎么实现的 你就知道为什么是这个结果了
是的,后来看了JDK源码
任何的Java的class都可以重新实现equals方法,比如对于这个Employee类,就应该自己实现equals方法:
如果采用Java默认的Object.equals()实现:
对于你给的例子,e1和e2是两个不同的对象,直接用=比较肯定返回的false。
另外,可以参考effective Java一书,其中提到,如果自己实现了hashcode方法,一定要保证如果equals返回true的情况下,hashcode()方法返回的值是一样的。
e1/e2是单独的两个Employee实例,当然不会equals
知识他们的ID一样
基础的东西看源代码吧,比什么都清楚,equals值比较,==是引用对象比较
简单来说 equals比较的字符串.
system.out.println(e1.equals(e2)) 这样是比较的二个对象
System.out.println(e1.getId().equeals(e2.getId());这样就是true