By-花伤情犹在 QQ:1926585708
在java中对于String类型字符串的值一旦创建后就不可更改的问题,明明把string的值改变了,为什么说不能修改呢?
String a ="hello";
String b = "java";
a = a + b;//在字符串常量池中新创建对象hellojava,然后把a的地址值指向helloJava的地址值
a的输出结果为 hello
b的输出结果为 java
a的值明明就发生改变了,但是a的值仍然是hello,只是地址值指向了字符串池中新创建的对象hellojava。
所以事实上String对象内容的改变是通过内存地址的改变来完成的,而其对象本身内容没有改变。
原理图:
![](https://img.haomeiwen.com/i15580691/39557da061e364e7.png)
怎么验证呢?
public class demo01 {
publicstaticvoidmain(String[] args){
String a ="hello";
System.out.println(System.identityHashCode(a));
String b = "java";
System.out.println(System.identityHashCode(b));
a = a + b;
System.out.println(System.identityHashCode(a));
}
}
对象的地址并不一定样,说明a=a+b;后a的地址已经变了,不再指向原来的地址。
网友评论