请帮助我确定像这样将 WrappedString 添加到 hashSet 之间的区别:
public class WrappedString {
private String s;
public WrappedString(String s) { this.s = s; }
public static void main(String[] args) {
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
hs.add(ws1); hs.add(ws2);
System.out.println(hs.size()); // outputs 2
}
}
以及以下内容:
public class WrappedString {
private String s;
public WrappedString(String s) { this.s = s; }
public static void main(String[] args) {
HashSet<Object> hs = new HashSet<Object>();
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(s1); hs.add(s2);
System.out.println(hs.size()); // outputs 1
}
}
我知道任何对象在 hashSet 中只存在一次,并且类型的两个实例WrappedString
被认为是不同的变量,尽管它们具有相同的值,但是为什么它以不同的方式对待 String 类型的两个实例(尽管它们是两个不同的,但仅存储一个实例对象)?