今天爱分享给大家带来String真的是不可变的吗?【详细介解】,希望能够帮助到大家。
我觉得如果别人问这个问题的话,回答不可变就可以了。 下面只是给大家看两个有代表性的例子:
1) String不可变但不代表引用不可以变
String str = "Hello";
str = str + " World";
System.out.println("str=" + str);
结果:
str=Hello World 1 解析:
解析:
实际上,原来String的内容是不变的,只是str由原来指向”Hello”的内存地址转为指向”Hello World”的内存地址而已,也就是说多开辟了一块内存区域给”Hello World”字符串。
2) 通过反摄是可以修改所谓的“不可变”对象
// 创建字符串"Hello World", 并赋给引用s
String s = "Hello World";
System.out.println("s = " + s); // Hello World
// 获取String类中的value字段
Field valueFieldOfString = String.class.getDeclaredField("value");
// 改变value属性的访问权限
valueFieldOfString.setAccessible(true);
// 获取s对象上的value属性的值
char[] value = (char[]) valueFieldOfString.get(s);
// 改变value所引用的数组中的第5个字符
value[5] = '_';
System.out.println("s = " + s); // Hello_World
结果:
s = Hello World s = Hello_World
解析:
用反摄可以访问私有成员, 然后反摄出String对象中的value属性, 进而改变通过获得的value引用改变数组的结构。但是一般我们不会这么做,这里只是简单提一下有这个东西。
原文链接:https://blog.itblood.com/2469.html,转载请注明出处。

![荡妇老婆学校v0.5a AI版[PC+安卓/7.14G/更新]Waifu Slut School [v0.5a] [同人SLG/汉化/动态]](/wp-content/uploads/replace/2025/09/15/91bea75339b5f2d2bb3fdeb1b481be88.webp)