package scjp;
import java.util.HashSet;
public class WrappedString {
private String s;
public WrappedString(String s) {
this.s = s;
}
// @Override
// public int hashCode() {
// final int prime = 31;
// int result = 1;
// result = prime * result + ((s == null) ? 0 : s.hashCode());
// return result;
// }
//
// @Override
// public boolean equals(Object obj) {
// if (this == obj)
// return true;
// if (obj == null)
// return false;
// if (getClass() != obj.getClass())
// return false;
// WrappedString other = (WrappedString) obj;
// if (s == null) {
// if (other.s != null)
// return false;
// } else if (!s.equals(other.s))
// return false;
// return true;
// }
public static void main(String[] args) {
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(ws1);
hs.add(ws2);
hs.add(s1);
hs.add(s2);
System.out.println(hs.size());
}
}
这一题输出为3,这里主要要为了对象的相等性和String的相等的异同,两个字符串只需要不为null并且字符串序列相等,则为true,由此我们知道s1.equals(s2),而自定义的object相等需要覆盖equals方法,所以输出为3,如果去掉被注释方法前的注释,则输出为2