关于声明String和StringBuilder对象hashCode的问题
StringBuilder a = new StringBuilder("a");StringBuilder b = new StringBuilder("a");
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println("-----------------");
String aa = new String("aa");
String bb = new String("aa");
System.out.println(aa.hashCode());
System.out.println(bb.hashCode());
System.out.println(aa==bb);
System.out.println(aa.equals(bb));
结果:
78236
6301159
false
false
-----------------
3104
3104
false
true
结果发现:
StringBuilder声明的对象hashCode值不同。String 声明的对象HashCode值相同。故 a.equals(b)为flase,aa.equals(bb)true;
a==b;aa==bb;两者为flase是因为==比较的是对象的值,每new一次。创建一个新值所以为flase;
但为什么StringBuilder声明的对象hashCode值不同呢?有人能帮我解释下吗?