前言:
今天突然看到一个问题为什么String类型设计为final,之前没深入想过这个问题,现在来看看。
源码中对String为什么设计成final的解释:
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.
字符串是恒定的,创建之后它们的值不能被改变。StringBuffer是可变的strings.字符串对象不可变让它们可以被共享。
什么叫不可改变?
就是这个值一旦在常量池被创建,是无法修改的,即便你在后面拼接一些其他字符,也会把新生成的字符串存到另外一个地址了,比如:
String a = "abc";
Log.e("ss","a之前的hashCode:"+a.hashCode());//a之前的hashCode:96354
a = "abc" + "123";
Log.e("ss","a之后的hashCode:"+a.hashCode());//a之后的hashCode:-1424436592