Java String是不可变的(immutable)
来源:互联网 发布:ipad专业视频剪辑软件 编辑:程序博客网 时间:2024/05/25 19:59
原文:Diagram to show Java String’s Immutability
翻译:get-set
有几个图表来说明Java String的不变性。
1. 声明一个String
String s = "abcd";
s
保存了对字符串对象abcd
的引用,如下图中的箭头。
2. 将字符串赋值给另一个字符串变量
String s2 = s;
s2
保存了同样的引用值,因为是同样的字符串对象。
3. 字符串相加
s3 = s + "ef";s4 = s3 + "gh";
本文的几张图跟原文都有不同,不同在于字符串保存的位置。
原文将s
和s2
都放到堆内存中,这是错误的。双引号创建的字符串会自动作为常量保存在方法区里的常量区,即使是"abcd"+"ef"
这样的字符串由于编译期优化,也是直接作为"abcdef"
字符串对象直接放到常量区的。
而s3 = s + "ef";
中,由于s
是变量,因此编译器会将s3
放到堆内存中。而s4
并未指向s3
原本的对象,却从新创建了一个拼接后的字符串对象,可见String是不可变的对象。
总结
一旦字符串在内存中创建,它就是不可变的,所有的对String的操作都不会改变对象本身,而是重新创建一个对象。
如果我们需要一个可以修改的字符串,我们需要使用StringBuilder
或StringBuffer
。否则,会出现许多需要被GC收集的字符串“垃圾”。
关于字符串的创建或操作在内存中的位置,请参考触摸java常量池。
0 0
- Java String是不可变的(immutable)
- 为什么Java的string类要设成immutable(不可变的)
- 为什么Java的string类要设成immutable(不可变的)
- 为什么Java的string类要设成immutable(不可变的)
- JAVA的不可变类(immutable)机制与String的不可变性
- (重要)Java中的String为什么是不可变的
- JAVA不可变类(immutable)机制与String的不可变性
- JAVA不可变类(immutable)机制与String的不可变性
- JAVA不可变类(immutable)机制与String的不可变性
- JAVA不可变类(immutable)机制与String的不可变性
- java 19:不可变字符串和限定字符串(Immutable String and Interned String)
- java String被设计成不可变(immutable)类
- Java Immutable不可变类
- 为什么说Java的String对象是不可变的
- 为什么说java的String对象是不可变的
- Java的string类为什么是不可变的
- Java的string类为什么是不可变的
- Java的string类为什么是不可变的
- Android Pdf 方案
- 八数码3
- SQL Server中角色与权限管理
- centos下的apache2.4.6虚拟主机设置
- 浅谈 LLDB 调试器 - 如果这叫浅谈,那深得到啥样了呢!
- Java String是不可变的(immutable)
- linux常用命令——rm删除命令
- android选项菜单看不到more按钮
- 11.18-学习心得
- skynet的windows版本
- 对sublime的认识(2)
- AngularJS内置指令
- JIT - 即时编译
- Volley -- 基本用法