黑马程序员技术交流社区

标题: String s=new String(“xyz”);创建了几个字符串对象? [打印本页]

作者: 811487754    时间: 2016-8-9 19:17
标题: String s=new String(“xyz”);创建了几个字符串对象?
String s=new String(“xyz”);创建了几个字符串对象?
作者: cat73    时间: 2016-8-9 20:53
本帖最后由 cat73 于 2016-8-9 21:26 编辑

创建了一个哟~
相关证明可以看这里:http://bbs.itheima.com/forum.php ... 580&pid=2642261

作者: wq1194165366    时间: 2016-8-9 21:01
这个很简单啊  你看咯
假设我们定义一个
String s2 ="xyz";
String s1=new String(“xyz”);
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
new String 是一个对象
"xyz"又是一个对象.
==比较的是值.
equals比较的是内容.
所以new String("xyz");地址值是不一样的
个人理解{:2_30:}勿喷
作者: lvyanxin    时间: 2016-8-9 21:02
如果常量池中已经建立“xyz”只会创建一个对象 new String(“xyz”)
如果常量池中没有这个“xyz”,就会创建一个“xyz”,然后在创建一个new String(“xyz”)
作者: 夜神月light    时间: 2016-8-9 21:18
两个啊,一个是常量池里面的"xyz",另一个是堆内存里面的对象s
作者: life写实    时间: 2016-8-9 21:42
视频里说的是两个,常量池一个,堆内存一个副地址。
作者: lvyanxin    时间: 2016-8-9 21:57
lvyanxin 发表于 2016-8-9 21:02
如果常量池中已经建立“xyz”只会创建一个对象 new String(“xyz”)
如果常量池中没有这个“xyz”,就会 ...

那这个呢    String a = "abc";    是不是没创建对象?     
作者: cat73    时间: 2016-8-9 23:13
lvyanxin 发表于 2016-8-9 21:57
那这个呢    String a = "abc";    是不是没创建对象?

是的,没有创建新对象。
这个对象是直接从常量池里 ldc 出来的。
ldc 不会创建对象,ldc 在遇到常量池中没有要找的对象的情况下,会直接抛错。
作者: gonghe    时间: 2016-8-9 23:29
两个把,!!
作者: 811487754    时间: 2016-8-12 09:01
gonghe 发表于 2016-8-9 23:29
两个把,!!

为什么呢




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