为什么字符串在Java中是不可变的
时间:2020-02-23 14:33:13 来源:igfitidea点击:
String类在Java中是不可变的。
如果我们认为字典的含义是不可变的,则意味着随着时间的推移无法改变或者不变,因此串在Java中是不可改变的或者未划算的。
让我们明白例子。
String str1="Hello"; str1.concat("theitroad"); System.out.println(str1); //Output will be Hello
如我们所见,str1的值没有改变。
它创建了另一个字符串对象,具有"hellooitoad",但没有更改字符串str1
这解释说,字符串本质上是不可变的。
现在让我们了解在Java中使字符串不变的潜在原因是什么
字符串池:
如果我们只需使用双引号为字符串分配值,它存储在名为String文字池中的区域中,并且可以通过许多引用变量引用一个字符串,如果字符串是可变的,则它将影响所有引用变量。
线程安全:
不变的对象是默认的线程安全,因此我们无需为其进行同步,并且可以在多个线程中安全地共享字符串实例。
安全 :
如果字符串不是不可变的,那么它可能会导致多个安全问题。
例如,在连接数据库时,将用户名,密码,端口和主机名等作为字符串提供,如果字符串是可变的,则任何黑客都可以更改参考值并导致应用程序威胁。
缓存哈希值:
当我们在HashMap或者Hashset中使用字符串作为键或者任何其他集合时,我们可以缓存它的哈希值。
由于字符串本质上是不可变的,因此每次都不需要计算它将是恒定的。
它大大提高了基于哈希集合的性能。
类装载:
字符串用作类加载机制。
它作为参数传递。
如果字符串是可变的,则它是一种安全威胁,因为任何黑客都可以改变它。