黑马程序员技术交流社区

标题: 关于String的小问题 [打印本页]

作者: 黄伟成    时间: 2013-5-9 17:19
标题: 关于String的小问题
本帖最后由 黄伟成 于 2013-5-9 21:53 编辑

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

作者: 殇_心。    时间: 2013-5-9 18:08
s 和 s1是同一个对象啊。"abc"存在常量池中。
如:String s1 = new String("abc");
如果new一个对象的话。会先调用常量池中的字符串"abc"。
然后在在堆内存中new一个对象,指向常量池中的字符串"abc"。
作者: 黑马-雷钊    时间: 2013-5-9 18:41
你好,string s = "abc";这个s会存在常量池中的。只有唯一一份。
String s1 = "abc"也是存在常量池中的。
在s1在执行时不会直接创建对象,会先在常量池中看看有没有一模一样的字符串,假如有的话就不会重新开辟内存空间了。
不信你可以试试
System.out.println(s == s1);
看看结果你就知道了
作者: SOAR    时间: 2013-5-9 18:47
二楼的就是正解。
作者: 朱晓杰    时间: 2013-5-9 19:02
楼上正解!顶一个!
作者: 黄伟成    时间: 2013-5-9 21:50
殇_心。 发表于 2013-5-9 18:08
s 和 s1是同一个对象啊。"abc"存在常量池中。
如:String s1 = new String("abc");
如果new一个对象的话。 ...

很谢谢你的回到,我已经明白了
作者: 黄伟成    时间: 2013-5-9 21:50
黑马-雷钊 发表于 2013-5-9 18:41
你好,string s = "abc";这个s会存在常量池中的。只有唯一一份。
String s1 = "abc"也是存在常量池中的。
...

谢谢你,我已经吸收了




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