Java 中equals 的用法和疑问 ?

发布于 2021-11-15 14:11:24 字数 1594 浏览 834 评论 7

对于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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

策马西风 2021-11-21 01:46:30

你要重写equals方法, 自己写比较逻辑..

equals跟==不同.

嘦怹 2021-11-21 01:45:20

所有类都默认继承Object类

Object类中有equals方法 去看下 那个方法怎么实现的 你就知道为什么是这个结果了

左岸枫 2021-11-21 01:44:37

是的,后来看了JDK源码

悸初 2021-11-21 01:23:35

任何的Java的class都可以重新实现equals方法,比如对于这个Employee类,就应该自己实现equals方法:

public boolean equals(Object obj) 
{
    if( (obj instanceof Employee) == false)
    {
        retur false;
    }
    Employee other = (Employee)obj;
    return (other.id == this.id) 
           && (other.firstname == this.firstname)
           && (other.lastName == this.lastName)
           && (other.department == this.department);
}

如果采用Java默认的Object.equals()实现:

public boolean equals(Object obj) 
{
        return (this == obj);
}

对于你给的例子,e1和e2是两个不同的对象,直接用=比较肯定返回的false。

另外,可以参考effective Java一书,其中提到,如果自己实现了hashcode方法,一定要保证如果equals返回true的情况下,hashcode()方法返回的值是一样的。

心欲静而疯不止 2021-11-21 00:32:59

e1/e2是单独的两个Employee实例,当然不会equals

知识他们的ID一样

反目相谮 2021-11-20 15:30:39

基础的东西看源代码吧,比什么都清楚,equals值比较,==是引用对象比较

顾忌 2021-11-16 18:51:22

简单来说 equals比较的字符串.

system.out.println(e1.equals(e2)) 这样是比较的二个对象

System.out.println(e1.getId().equeals(e2.getId());这样就是true

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文