String源码研究

先来解决一个比较经典的问题,String为什么是final?

final的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。

1、从设计安全上讲,

1)、确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。
换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。
2)、String 一旦被创建是不能被修改的,

2、从效率上讲:

1)、设计成final,JVM才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率。
2)、Java设计者认为共享带来的效率更高,即采用了享元模式,每当生成一个新内容的字符串时,他们都被添加到一个共享池中,当第二次再次生成同样内容的字符串实例时,就共享此对象,而不是创建一个新对象,但是这样的做法仅仅适合于通过=符号进行的初始化。

参考文献
https://blog.csdn.net/qq_27093465/article/details/52190915
https://www.cnblogs.com/zhangyinhua/p/7689974.html

3/27/2018 11:16:57 PM