今天突然看到一个问题为什么String类型设计为final
源码中对String为什么设计成final的解释:
字符串是恒定的,创建之后它们的值不能被改变。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
- 1
- 2
- 3
- 4
- 5
为什么不可变?
final