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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝妮娜 黑马帝   /  2011-9-23 20:12  /  2271 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如代码
String s=Hello;
s=s+World;
s所指向的对象改变变了吗?

5 个回复

倒序浏览
黑马网友  发表于 2011-9-23 20:39:11
沙发

希望帮到你

String s="hello"; 这句中的s与s=s+"world"; 中的第一个s并不是同一个对象,而是分配在2块内存中的两个不同对象
可以说每一个String对象,都是不同的内存空间

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
楼主的s变量的指向的对象是没有改变的,内存地址也是不变,String是引用类型,下面我给你个示例
希望你能看懂
String s="Hello";
String s1="Hello";
System.out.println(s==s1);//true
这样输出是true,也就是说变量s和s1存储的内容也是地址,但却都是方法区常量池中"Hellp"所在的地址
String s2=new String("Hello");
String s3=new String("Hello");
System.out.println(s2==s3);//false
变量s2和s3储存的内容是JVM在堆中开辟的两个String对象,==比较就是两个不同地址
回复 使用道具 举报
黑马网友  发表于 2011-9-23 22:41:19
板凳
应该改变了的,s=s+word的S其实指向的内存中为''helloword''分配的内存,而原来的S指向内存分配给的"hello"将被删除!

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-25 18:54:45
报纸
懂啦,谢谢各位

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-25 22:00:34
地板
改变了,第一次定义 String s=“Hello”,会在内存中一个叫‘字符池’的地方,放入“Hello”,当下次再用这个字符时候,就直接从这个字符池中查找;s=s+“World”,重新创建了一个变量,同样的在‘字符池’中放入该字符串,下次再用时候,直接从该‘字符池’中找。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马