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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄伟成 中级黑马   /  2013-5-9 17:19  /  1551 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄伟成 于 2013-5-9 21:53 编辑

如果说
String s = "abc" 产生了一个对象为"abc",String s1="abc"又产生一个新的对象"abc",请问程序是怎么识别这两个对象呢?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
s 和 s1是同一个对象啊。"abc"存在常量池中。
如:String s1 = new String("abc");
如果new一个对象的话。会先调用常量池中的字符串"abc"。
然后在在堆内存中new一个对象,指向常量池中的字符串"abc"。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
你好,string s = "abc";这个s会存在常量池中的。只有唯一一份。
String s1 = "abc"也是存在常量池中的。
在s1在执行时不会直接创建对象,会先在常量池中看看有没有一模一样的字符串,假如有的话就不会重新开辟内存空间了。
不信你可以试试
System.out.println(s == s1);
看看结果你就知道了

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
二楼的就是正解。
回复 使用道具 举报
楼上正解!顶一个!
回复 使用道具 举报
殇_心。 发表于 2013-5-9 18:08
s 和 s1是同一个对象啊。"abc"存在常量池中。
如:String s1 = new String("abc");
如果new一个对象的话。 ...

很谢谢你的回到,我已经明白了
回复 使用道具 举报
黑马-雷钊 发表于 2013-5-9 18:41
你好,string s = "abc";这个s会存在常量池中的。只有唯一一份。
String s1 = "abc"也是存在常量池中的。
...

谢谢你,我已经吸收了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马