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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯伟超 中级黑马   /  2012-12-22 14:33  /  1809 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


String sr=new String("dcd");或者这样写String sr="acbd";
sr="234";
System.out.println(sr);
在这上面它是在内存中怎么实现的呢?还有不是说String类型的值不是不会改变吗?那这个怎么理解?
还有在内存中sr的地址值会改变不?改变的话是怎么改变的?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
String sr=new String("dcd");首先在内存中生成一个“dcd”对象,然后创建一个String类的对象sr去指向“dcd”对象。
String sr="acbd";这个是生成一个String类型的sr对象,该对象为“acbd”。
sr="234";如果再执行这一句,则说明sr对象不指向原来的“acbd”对象的地址了,将指向“234”这个对象对应的地址,但是内存中的“acbd”不会消失。
所以String类型的值初始化以后不会改变,改变的是对象所引用的地址。
System.out.println(sr);


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
这个就是常量池中有两个常量dcd和234,而String sr=new String("dcd"),是把sr指向dcd常量,而sr=“234”是有把sr指向了234这个常量,但是dcd还存在而且也没有改变

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
String对象内容是不可变的,你改变为sr="234";这是sr指向了另外一个对象,原先的对象"dcd"会被垃圾回收器回收掉。有疑问时,不要轻易相信自己的眼睛看见的,要看内存中的情况
回复 使用道具 举报
这里,内存中是有一块区域专门存放一些常量对象的,只要你写了一个字符串,常量池中就会有他的地址。你用的String sr,这是声明一个记录字符串类型对象地址的变量,Sr是变量,后面的“***”都是对象,对象没变,也就是字符串没变,变的是变量指向的地址。够明白么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马