@Test
public void testStringFinal() {
String str = new String("abc");
System.out.println(str.hashCode());
str += "d";
System.out.println(str.hashCode());
str += "e";
System.out.println(str.hashCode());
String str2="abcde";
System.out.println(str2.hashCode()+" "+str.hashCode());
}
输出结果:
结论:
”adc“分别加d和e的hashcode都不同,说明string不可变
abcde合并之后的字符串的hashcode和"abcde"的hashcode相等,说明string只比对字符串的值
翻看源码也可以发现,String类是final修饰的,其他的方法也都是final修饰,不可变的
源码片段如图:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
private final int count;
private static final long serialVersionUID = -6849794470754667710L;