new了两个对象地址是相同的,求大佬给解答

问题描述

无聊中写了个测试

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

Employee employee = new Employee();
    Employee employee1 = new Employee();
    Employee employee2 = new Employee();
    Employee employee3 = new Employee();
    employee.setEmId("111");
    employee1.setEmId("111");
    employee2.setEmId("112");
    employee3.setEmId("111");
    employee3.setLineTime(222);

    System.out.println("包含:"+employee);
    System.out.println("包含:"+employee1);

    ArrayList<Object> objects = new ArrayList<>();
    objects.add(employee1);
    objects.add(employee2);
    objects.add(employee3);

    if(objects.contains(employee)){
        System.out.println("原始:"+objects);
        System.out.println("包含:"+employee);
        objects.remove(employee);
        System.out.println("移除:"+objects);
        objects.add(0,employee);
        System.out.println("添加:"+objects);
    }
}

输出结果:
包含:com.yangxu.market.entity.Employee@983c7d0
包含:com.yangxu.market.entity.Employee@983c7d0
原始:[com.yangxu.market.entity.Employee@983c7d0, com.yangxu.market.entity.Employee@46a38bef, com.yangxu.market.entity.Employee@983c8ae]
包含:com.yangxu.market.entity.Employee@983c7d0
移除:[com.yangxu.market.entity.Employee@46a38bef, com.yangxu.market.entity.Employee@983c8ae]
添加:[com.yangxu.market.entity.Employee@983c7d0, com.yangxu.market.entity.Employee@46a38bef, com.yangxu.market.entity.Employee@983c8ae]

你期待的结果是什么?实际看到的错误信息又是什么?

为什么new的两个新对象,会使用同一个地址??

阅读 5.4k
2 个回答

Object.toString()默认实现是:

getClass().getName() + '@' + Integer.toHexString(hashCode())

Object.hashCode()默认对不同的对象会返回不同的值。

然而,toString 跟 hashCode 都是可以被重载的 ...

看你的程序,你的 employee 跟 empliyee1 是一样的,employee1, employee2, employee3 各不相同。那么,是不是 Employee 类的 equals 跟 hashCode 都被重载了呢 ...

hashCode冲突了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题