黑马程序员技术交流社区

标题: String a = new String("a"),创建了几个String对象? [打印本页]

作者: nblity007    时间: 2016-8-2 22:32
标题: String a = new String("a"),创建了几个String对象?
有时候是两个有时候是一个吧?
作者: 牧风    时间: 2016-8-2 23:09
两个 一个在常量池 存了"a" 一个在堆 存了常量池 "a'的地址
作者: hijk    时间: 2016-8-2 23:18
这是手动装箱过程,只有一个引用对象,跟String a="a" 是一样的,后者是自动装箱(自动创建对象);
作者: 0425    时间: 2016-8-3 00:10
2个..................................
作者: fzc123    时间: 2016-8-3 00:12
赞赞赞赞赞赞赞赞赞赞赞赞赞
作者: showJiang    时间: 2016-8-3 00:14
两个,“a”作为一个常量,会存在于常量池中,new出来的对象在堆内存中,可以看作是常量池中“a”的拷贝
作者: cat73    时间: 2016-8-3 00:31
我可以很肯定的告诉你,只创建了一个对象。
可以在 JVM 规范里找到相关规定。
作者: 花陌相惜    时间: 2016-8-3 00:38
创建了两个对象  String a = new String("a")
创建了两个对象,一个是new String(  )对象,在堆内存中
一个是”a”对象,在常量池中
把 a的地址值给 new String(  )
作者: caolufo    时间: 2016-8-3 00:47
到底是几个?
作者: accomplonely    时间: 2016-8-3 19:55
2个,一个在常量池中,还有一个副本再堆里面
作者: 黑马YJM    时间: 2016-8-3 20:30
cat73 发表于 2016-8-3 00:31
我可以很肯定的告诉你,只创建了一个对象。
可以在 JVM 规范里找到相关规定。 ...

我也觉得是一个,"a" 只是一个常量对吗,, new的才是一个对象 是吗

求大神给解释一下呗
作者: 崇尚技术的菜鸟    时间: 2016-8-3 21:23
我觉得8楼是正解,你们觉得呢
作者: hexi5432    时间: 2016-8-3 21:39
新手报道,大哥求罩!
作者: zxm18364195231    时间: 2016-8-3 23:46
是一个构造函数,生成一个新的对象,然后将这个新的对象的引用赋给a
作者: zhangjiesss    时间: 2016-8-4 09:12
两个吧应该
作者: nblity007    时间: 2016-8-4 21:28
牧风 发表于 2016-8-2 23:09
两个 一个在常量池 存了"a" 一个在堆 存了常量池 "a'的地址

如果常量池之前有“a”,不就是只用创建一个对象?
作者: 大帅哥哥    时间: 2016-8-7 16:15
必须的两个  一个在"栈"内存,一个在"堆"内存.




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