黑马程序员技术交流社区

标题: 传值的问题 [打印本页]

作者: 冯伟超    时间: 2012-12-22 14:33
标题: 传值的问题

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


作者: 焦健    时间: 2012-12-22 14:49
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);



作者: hanyahui    时间: 2012-12-22 14:54
这个就是常量池中有两个常量dcd和234,而String sr=new String("dcd"),是把sr指向dcd常量,而sr=“234”是有把sr指向了234这个常量,但是dcd还存在而且也没有改变
作者: 黄锦成    时间: 2012-12-24 11:58
String对象内容是不可变的,你改变为sr="234";这是sr指向了另外一个对象,原先的对象"dcd"会被垃圾回收器回收掉。有疑问时,不要轻易相信自己的眼睛看见的,要看内存中的情况

作者: 黑马-邢广耀    时间: 2012-12-24 12:33
这里,内存中是有一块区域专门存放一些常量对象的,只要你写了一个字符串,常量池中就会有他的地址。你用的String sr,这是声明一个记录字符串类型对象地址的变量,Sr是变量,后面的“***”都是对象,对象没变,也就是字符串没变,变的是变量指向的地址。够明白么?




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