为什么字符串在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中使用字符串作为键或者任何其他集合时,我们可以缓存它的哈希值。
由于字符串本质上是不可变的,因此每次都不需要计算它将是恒定的。
它大大提高了基于哈希集合的性能。

类装载:

字符串用作类加载机制。
它作为参数传递。
如果字符串是可变的,则它是一种安全威胁,因为任何黑客都可以改变它。