对象equals与hashCode

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

你可能感兴趣的:(HashCode)