黑马程序员技术交流社区

标题: String 类定义成final 的目的? [打印本页]

作者: 马德强    时间: 2011-12-17 18:52
标题: String 类定义成final 的目的?
本帖最后由 马德强 于 2011-12-17 19:12 编辑

查api 发现String 类定义成final了,这样做有什么好处?
不允许继承String 的目的是什么?
作者: 申绪胜    时间: 2011-12-17 19:09
主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final
1.String类中的成员属性也几乎都设计成了private final的,这样String就被设计成一个不变类,这样有助于共享,提高性能。可以将字符串对象保存在字符串常量池中以供与字面值相同字符串对象共享。如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,将同时改变一起共享字符串对象的其他String类型变量所引用的对象的值。
2.String被设计为不变类,其中的offset,value[]都被设计成private final的,这样在多线程时,对String对象的访问是可以保证安全的。java程序语言的许多特性依赖于不可变的String对象。
上面这些原因列出后发现2和3不是String类设计成final的原因,但总归也是String被设计成不变类的原因,所以暂且写上,待以后有更深一步理解和体会时再做调整。
作者: 马伟奇    时间: 2011-12-17 19:18
主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2