java中String类为什么要设计成final

来源:互联网 发布:python 获取局域网ip 编辑:程序博客网 时间:2024/06/07 03:19

java中的String是一个非常有趣的类。java中String类被设计成是final的,这个问题也确实困扰我很久,当然到现在为止我还是搞不清楚为什么要设计成final,呵呵。在这里简单记录一下从网上看到的或自己个人理解的一些想法,记录这个并不是为了破译String类的设计意图,而是仅仅用来为讨论和以后进一步学习记录一些东西。下面的一些原因想法或者是从网上查询到的别人的一些观点,而我觉得还有一点道理,或者就是我自己心血来潮时的一些莫名其妙的想法。
1、不允许其他类继承。这个应该不是最终原因,但这里权且也当成是一个原因。
2、String类中的成员属性也几乎都设计成了private final的,这样String就被设计成一个不变类,这样有助于共享,提高性能。可以将字符串对象保存在字符串常量池中以供与字面值相同字符串对象共享。如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,将同时改变一起共享字符串对象的其他String类型变量所引用的对象的值。
3、String被设计为不变类,其中的offset,value[]都被设计成private final的,这样在多线程时,对String对象的访问是可以保证安全的。java程序语言的许多特性依赖于不可变的String对象。

上面这些原因列出后发现2和3不是String类设计成final的原因,但总归也是String被设计成不变类的原因,所以暂且写上,待以后有更深一步理解和体会时再做调整。

0 0
原创粉丝点击