Java中String 类不可变的原因是什么


Java中String 类不可变的原因是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
S 香港云主机tring 设计成不可变,主要是从性能和安全两方面考虑。这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。字符串常量池(String pool)是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串已经存在于常量池中,则不会创建新的对象,而是直接引用已经存在的对象。这样做能够减少 JVM 的内存开销,提高效率。比如引用 s1和 s2 都是指向常量池的同一个对象 “abc”,如果 String 是可变类,引用 s1 对 String 对象的修改,会直接导致引用 s2 获取错误的值。所以,如果字符串是可变的,那么常量池就没有存在的意义了。
因为字符串不可变,所以在它创建的时候 hashcode 就被缓存了,不需要重新计算。这就使得字符串很适合作为 HashMap 中的 key,效率大大提高。多线程中,可变对象的值很可能被其他线程改变,造成不可预期的结果。而不可变的 String 可以自由在多个线程之间共享,不需要同步处理。String 的内部很简单,有两个私有成员变量而并没有对外提供可以修改这两个属性的方法。String 有很多 public 方法,每个方法都将创建新的 String 对象,比如 substring 方法:String 被 final 修饰,因此我们不可以继承 String,因此就不能通过继承来重写一些方法。当传入可变数组 value[] 时,进行 copy 而不是直接将 value[] 复制给内部变量。从 String 类的设计方式,我们可以总结出实现不可变类的方法:看完上述内容,你们掌握Java中String 类不可变的原因是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注开发云行业资讯频道,感谢各位的阅读!

相关推荐: windows中thumbs.db组件能不能删除

这篇文章主要介绍windows中thumbs.db组件能不能删除,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!thumbs.db组件是一个负责微软系统略缩图的文件,我们可不用删除。如果真的想删除,具体步骤如下:1.按win+r进入运行窗…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/30 16:44
下一篇 07/30 16:44

相关推荐