首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >一个Java字符串真的是不可变的?

一个Java字符串真的是不可变的?

提问于 2017-12-22 16:51:10
回答 2关注 0查看 191

我们都知道String在Java 中是不可变的,但请检查以下代码:

代码语言:txt
复制
String s1 = "Hello World";  
代码语言:txt
复制
String s2 = "Hello World";  
代码语言:txt
复制
String s3 = s1.substring(6);  
代码语言:txt
复制
System.out.println(s1); // Hello World  
代码语言:txt
复制
System.out.println(s2); // Hello World  
代码语言:txt
复制
System.out.println(s3); // World  
代码语言:txt
复制
代码语言:txt
复制
Field field = String.class.getDeclaredField("value");  
代码语言:txt
复制
field.setAccessible(true);  
代码语言:txt
复制
char[] value = (char[])field.get(s1);  
代码语言:txt
复制
value[6] = 'J';  
代码语言:txt
复制
value[7] = 'a';  
代码语言:txt
复制
value[8] = 'v';  
代码语言:txt
复制
value[9] = 'a';  
代码语言:txt
复制
value[10] = '!';  
代码语言:txt
复制
代码语言:txt
复制
System.out.println(s1); // Hello Java!  
代码语言:txt
复制
System.out.println(s2); // Hello Java!  
代码语言:txt
复制
System.out.println(s3); // World  

为什么这个程序是这样操作的?为什么价值s1和s2变化,但不是s3?

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档