为什么我这里的literal string 和我的封装类equals不上呢,放进set里面也说不相同
,但是hashcode是相等
import java.util.HashSet;
import java.util.Set;
public class SetTesting{
static class WrapString{
String str;
public WrapString(String str){
this.str = str;
}
@Override
public String toString(){
return str;
}
@Override
public int hashCode(){
return str.hashCode();
}
@Override
public boolean equals(Object o){
if(o == this)
return true;
if(o.hashCode() == this.hashCode())
return true;
if(o instanceof String){
String objectString = (String) o;
if(objectString.hashCode() == hashCode())
return true;
}
return false;
}
}
public static void main(String[] args){
Set set = new HashSet();
System.out.println(new WrapString("abc").equals(new String("abc")));
//true
System.out.println(new WrapString("abc").equals(new WrapString("abc"
))); //true
System.out.println("abc".equals(new String("abc"))); //true
System.out.println("abc".hashCode());
System.out.println(new WrapString("abc").hashCode());
System.out.println("abc".equals(new WrapString("abc")));//false
System.out.println(new WrapString("abc").equals("abc"));//true
set.add(new WrapString("abc"));
set.add(new WrapString("abc"));
set.add(new String("abc"));
set.add("abc");
System.out.println(set.size()); //2
}
}