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

 我来答
静微微11
2016-08-12 · 超过14用户采纳过TA的回答
知道答主
回答量:34
采纳率:100%
帮助的人:20.5万
展开全部
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被设计成不变类的原因,所以暂且写上,待以后有更深一步理解和体会时再做调整。

更多相关内容参考http://www.viiboo.cn
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式