关于后端:为什么String是不可变的

3次阅读

共计 480 个字符,预计需要花费 2 分钟才能阅读完成。

简介

String 是最罕用的类之一,可为什么它要设计成不可变的呢。在面向对象的世界里,不可变指的是是指一旦一个对象实现它的结构过程,这个实例就无奈被扭转了。
在 java 和 C# 等语言中,String 是不可变的

不可变的益处

类加载

String 被用作类加载的参数,试想一下当 String 为可变的话会产生什么,它的值会被篡改,继而就会加载谬误的类。不可变的个性提供了平安去加载精确的类。例如,咱们想要去加载 com.amberke.PasswordAuth 来校验明码,然而它所指向的值可能被改成了 com.hack.PasswordHacker。

线程平安

不可变曾经隐式地使 String 变得线程平安了,没必要额定地在多线程中应用 synchronization 去实现线程平安。

HashMap Key 的现实类型

String 经常用作 HashMap Key 的类型,正因为它是不可变的,它的 hashcode 创立的时候就曾经有了,不须要再去计算值了。

堆空间

不可变能够节俭掉许多堆的空间占用,因为如果创立了值一样的不同的 String 变量,它们会指向同一个字符串对象,也就是在内存中其实只有一份存在。

正文完
 0