【Java】java:源码解读String类的不可变特性
String类不可变的含义
String对象创建之后便不会再改变,任何看起来的变化都是通过创建新的String对象来完成的。
举例:
String a = new String("abc");a = a + "d";
第一个语句创建了一个String 对象abc,a是指向这个对象的引用
第二个语句右边创建了另外一个String对象abcd;
执行第二个语句时,并不会修改原先的对象abc;
不可变是如何实现的
这里有三个关键点:
1、String类被final修饰,不可被继承;因为一旦允许继承的化,那么方法就有可能被重写,也就有可能会破坏不可变性,这就是为什么用final修饰的原因;
2、private final修饰char[] 数组;字符串底层使用字符数组来存储,这个字符数组通过private final修饰,防止外部对字符串做出改变;
3、String类种的任何方法都不会对字符串进行改动;
为什么设计为不可变的
主要还是为了性能方面的考虑,因为在java语言设计之初,就认为String将会被频繁的使用,所以设定了常量池,目的是为了尽可能的复用已有对象,这就要求已有对象是不可变的;
当然设计成不可变对象,一定程度上也可以增加代码的安全性,比如可变对象作为hashMap的key时,如果先放入map之后,再改变对象,那么可能就会破坏Map对key的唯一性要求;
零基础学习Java编程,更多Java技巧可以加入我的十年Java学习园地,技术交流,资源共享,问题答疑,开发经验分享。
以上是 【Java】java:源码解读String类的不可变特性 的全部内容, 来源链接: utcz.com/a/104322.html