String的不可变性问题
来源:2-14 字符串的不可变性
qq_2XL_0
2017-12-18 09:34:23
如果代码这样:
String s3=new String("hello");
s3="hello,imooc";
"hello"和"hello,imooc"在不同的地址,那s3指向的内存空间不就不同了?
课程里说“所谓的修改其实是创建了新的对象,所指向的内存空间不变”,
下面又说“s1不再指向 imooc 所在的内存空间,而是指向了 hello,imooc”。
上一句是说字符串“imooc”本身的内存空间不变,下面一句是指 s1 指向的内存空间改变了,是这样吗?
1回答
irista23
2017-12-18
String s3=new String("hello");这句new String("hello")是在堆中创建一个String对象,并且让栈中的s3引用指向了这个空间。s3="hello,imooc";是在字符串常量池中检查是否有"hello,imooc",没有就创建(字符串常量池是java堆内存中一个特殊的存储区域),这时上面创建的对象空间并不会改变,只是s3不再指向他了。
相似问题