您的位置:首页 > 其它

为什么String被设计为不可变

2015-06-05 17:58 302 查看
对象不可变定义

不可变对象是指对象的状态在被初始化以后,在整个对象的生命周期内,不可改变。

如何不可变

通常情况下,在java中通过以下步骤实现不可变

对于属性不提供设值方法

所有的属性定义为private final

类声明为final不允许继承

Return deep cloned objects with copied content for all mutable fields in class

注意:不用final关键字也可以实现对象不可变,使用final只是显示的声明,提示开发者和编译器为不可变。

Java中典型的不可变类为String类

为什么String被设计为不可变?

安全首要原因是安全,不仅仅体现在你的应用中,而且在JDK中,Java的类装载机制通过传递的参数(通常是类名)加载类,这些类名在类路径下,想象一下,假设String是可变的,一些人通过自定义类装载机制分分钟黑掉应用。如果没有了安全,Java不会走到今天

性能 string不可变的设计出于性能考虑,当然背后的原理是string pool,当然string pool不可能使string类不可变,不可变的string更好的提高性能。

线程安全 当多线程访问时,不可变对象是线程安全的,不需要什么高深的逻辑解释,如果对象不可变,线程也不能改变它。

以上内容应该会使面试官满意

参考:click here
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: