为什么string是不可变的

来源:互联网 发布:java培训大概要多少钱 编辑:程序博客网 时间:2024/04/29 10:09

这只是对原文章的一个简单翻译和总结,建议看原文章:

http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/

1、字符串池的要求

字符串池在Java堆内存中一块特殊的内存区域,当要新建一个字符串时,系统会检查字符串中是否存在要创建的字符串,如果存在就把引用直接传递给新的String对象,如果不存在,才会在字符串中新建一个字符串。

下面的代码实际上在堆内存中只创建了一个string 对象

String string1 = "abcd";String string2 = "abcd";

他看起来就像这样:



所以如果一个string是可变的,当改变一个内容的值时,就会对其他的引用有影响。

2、允许字符串缓存其Hashcode

字符串 的hashcode在Java中被经常使用,例如HashMap。成为不可变得,保证了他的hashcode一直是一样的,所以不用担心他的变化。那就意味着没有必要当每次使用它时都计算hashcode

3、安全

在java类里,String被广泛用做参数,例如:网络连接、打开文件等等。如果String是可变的,一个连接或者是文件就会发生改变,导致严重安全威胁。这个方法可能会认为它是一台机器的连接,但是不是。当参数都是字符串时,可变的string在放射也可能会导致严重的安全性问题。

总的来说,这些原因包括设计方面、效率、安全方面。

	
				
		
原创粉丝点击