黑马程序员技术交流社区

标题: 提问下 关于String 和内存的 [打印本页]

作者: hsdwg    时间: 2013-7-31 17:07
标题: 提问下 关于String 和内存的
String 直接赋值不会开辟堆内存空间,内容不会改变,那么看这段小程序,
public class StringDemo{
        public static void main(String[] args)
        {
  String str1  = "wanggang";//声明字符串
  str = str+"dashuaige!!";
  System.out.println("str = "+str);
  
}

}
因为String直接赋值不会开辟堆内存空间的,我不明白这里的值为什么改变了?
作者: 行如止水    时间: 2013-8-8 15:42
这个问题很容易,String类对象的内容是不能改变的,但是其指向是可以改变的。就这个问题来说,str1开始的时候指向的是内容为“wanggang“的堆区间,但是第二条语句过后,系统又新建了一个“wanggangdashuige!!”的内存空间,又命令str指向它,这样str指向的内容就改变了,你输出的时候会错误的感觉到是原来的内容变了。其实是因为其指向变了,原来的字符窜内容变成了垃圾空间(调用System.gc()可以回收)。
就是这样了。可以改变的应该用StringBuffer类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2