为什么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在放射也可能会导致严重的安全性问题。
总的来说,这些原因包括设计方面、效率、安全方面。
- 为什么String类型是不可变的?
- 为什么string是不可变的
- 为什么String类是不可变的
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String类是不可变的
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String类是不可变的
- 为什么String类是不可变的?
- 为什么String类是不可变的?
- 为什么String是不可变的
- String为什么是不可变的?
- 为什么String是不可变的
- Discuz! X3 瀑布流设置方法:
- A+B
- 乒乓缓冲机制
- C语言文件操作函数总结
- 指针错误总结
- 为什么string是不可变的
- 公式
- 数组及函数
- WTL-双缓冲(double buffer)绘图
- cocos2d-X 节点(UIDragPanel.h)API
- cocos2d-X 节点(UIListView.h)API
- cocos2d-X 节点(UIPageView.h)API
- cocos2d-X 节点(UIScrollInterface.h)API
- cocos2d-X 节点(UIScrollView.h)API