A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hsdwg 初级黑马   /  2013-7-31 17:07  /  1671 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String 直接赋值不会开辟堆内存空间,内容不会改变,那么看这段小程序,
public class StringDemo{
        public static void main(String[] args)
        {
  String str1  = "wanggang";//声明字符串
  str = str+"dashuaige!!";
  System.out.println("str = "+str);
  
}

}
因为String直接赋值不会开辟堆内存空间的,我不明白这里的值为什么改变了?

点评

说得很详细了,不错  发表于 2013-8-17 21:44

5 个回复

倒序浏览
这个问题很容易,String类对象的内容是不能改变的,但是其指向是可以改变的。就这个问题来说,str1开始的时候指向的是内容为“wanggang“的堆区间,但是第二条语句过后,系统又新建了一个“wanggangdashuige!!”的内存空间,又命令str指向它,这样str指向的内容就改变了,你输出的时候会错误的感觉到是原来的内容变了。其实是因为其指向变了,原来的字符窜内容变成了垃圾空间(调用System.gc()可以回收)。
就是这样了。可以改变的应该用StringBuffer类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马