Java字符串的不可变性
2024-09-05 16:53:09
声明一个字符串引用变量:
String s = "abcd";
s是一个引用变量,指向 堆内存中的字符串常量 "abcd"
再声明一个字符串引用变量:
String s2 = s;
把s变量赋值给s2,那么 s 和 s2 两个引用变量同时指向堆内存中的字符串常量 "abcd"
改变字符串:
s = s.concat("ef")
执行连接方法之后,在对内存中产生了两个常量字符串:"abcd" "abcdef"
并且 s 引用变量重新指向了新的字符串常量:"abcdef"
而 s2 引用还是指向字符串常量:"abcd"
总结:
一个字符串被创建之后,就存在对内存中,并且不能被改变,所有操作字符串的方法都不能改变这个字符串本身,而是返回一个新的方法
如果我们需要一个可以改变的字符串,可以使用StringBuffer或者StringBuilder
另外,如果创建了很多的字符串常量,对于垃圾回收器来回收这些字符串常量所占用的空间将会非常耗时
最新文章
- size_t 和 size_type的区别
- C# 通过反射类动态调用DLL方法
- 应用C#和SQLCLR编写SQL Server用户定义函数
- C++中typename和class的区别
- 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解
- javascript 连等赋值问题(这是从SegmentFault转过来的一个问题)
- ViewController与outlet绑定
- 8个开发必备的PHP功能
- URAL1291. Gear-wheels
- vs git .ignore
- yii2源码学习笔记(十二)
- 实现单例模式C++版本
- React Starter Kit 中文文档
- 理解spread运算符与rest参数
- 移动iptv安装三方软件
- C# WPF 获取窗体和控件的句柄
- margin-left:-20px
- C99标准的柔性数组 (Flexible Array)
- ubuntu 设置github秘钥
- Use Multiple log4net Outputs from One Application