gpt4 book ai didi

java - 对象引用和对象显示不同的结果

转载 作者:行者123 更新时间:2023-12-04 04:55:12 24 4
gpt4 key购买 nike

我对这些概念很陌生,用户也很天真,所以请原谅我下面的问题,但是

我试图理解java中集合的基本概念

我做了以下类(class)

package com.vish;

public class HashSetDemo {
private int age;

public HashSetDemo(int age) {
this.age = age;
}
}

现在我在下面的类(class)中描述了集合框架
package com.vish;

import java.util.HashSet;

public class HashSetDemo1 {
public static void main(String args[]) {

HashSetDemo hsd = new HashSetDemo(23);
HashSetDemo hsd1 = new HashSetDemo(24);
HashSet<HashSetDemo> hashset = new HashSet<HashSetDemo>();
hashset.add(hsd);
hashset.add(hsd1);
System.out.println(hashset.size());
System.out.println(hashset.contains(hsd));
System.out.println(hashset.contains(new HashSetDemo(23)));
}
}

现在这个输出如下
2
true
false

为什么最后一个是假的,当它具有相同的对象引用时

谢谢

最佳答案

Why is the last one false,when it has the same object reference



它没有。您已经创建了一个新对象,它恰好与 age 具有相同的值。 .

这就像要求建筑商为您 build 两间有 5 间卧室的房子。是的,它们看起来一样——但它们是不同的房子,地址不同。

现在 HashSet实际上不用于相等的引用 - 它检查相等的对象 - 其中相等性是通过 hashCode 确定的和 equals方法。默认情况下,这会检查引用标识,但并非必须如此。因此,如果您覆盖 equalshashCode确定平等只是你的 age值,那么它会认为您的新对象等于旧对象。
public final class HashSetDemo {
private final int age;

public HashSetDemo(int age) {
this.age = age;
}

@Override public int hashCode() {
return age;
}

@Override public boolean equals(Object other) {
if (!(other instanceof HashSetDemo)) {
return false;
}
HashSetDemo otherDemo = (HashSetDemo) other;
return age == otherDemo.age;
}
}

关于java - 对象引用和对象显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16851437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com