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学习园地,技术交换,资源共享,问题答疑,开发教训分享。