在看到hashcode,equal时有个疑问:
String a = "小乔";
String te = new String("小乔");
System.out.println(te.equals(a));
System.out.println("te:hashcode>>>>"+te.hashCode());
System.out.println("a:hashcode>>>>>"+a.hashCode());
ChangeStringBuilder csb = new ChangeStringBuilder(new StringBuilder("小乔"));
ChangeStringBuilder csb1 = new ChangeStringBuilder(new StringBuilder("小乔"));
System.out.println(csb.hashCode());
System.out.println(csb1.hashCode());
System.out.println(csb.equals(csb1));
String在定义相同值的时候,equal返回true,hashcode值也相同,
StringBuilder定义相同值,equal返回false,hashcode值不同。
问:
java在对象创建的时候,是相同值储存一个地址,不同指针指向,还是创建两个对象,在不同的储存位置?
如果是一个地址,为什么StringBuilder的hashcode码不一样?
hashcode值是代表储存位置,还是检索键?
答1:如果创建对象如StringBuilder,则为两个指针,在不同的位置储存
答2:因为不是一个地址,如果创建String,则为一个地址,hashcode也一样,因为String创建后为常量,在常量池中保存
答3: hashcode % 容量才能表示存储位置,如果该对象不用于比较,不用于存放在HashMap、HashSet等容器中,hashcode没有任何意义
有疑问清追问,解决了你的疑问清采纳,谢谢!!!