返回信息流网上查了半天,有说:在常量池中创建了一个abc,在堆中创建了一个。
有说:new string(“abc”)不会在常量池中创建abc,只会在堆中创建一个。
到底哪个有道理呀,面试啥的就爱问这种问题。
那比如String s = new String ("ab")+"c"又创建几个对象了?
http://zhidao.baidu.com/question/348765965.html?fr=qrl&index=4&qbl=topic_question_4&word=new%28%22abc%22%29%B4%B4%BD%A8%BC%B8%B8%F6%B6%D4%CF%F3
这是一条镜像帖。来源:北邮人论坛 / java / #34933同步于 2014/9/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
String a = new String("abc")到底创建了几个对象
HB0318
2014/9/25镜像同步19 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
String str="abc";应该是在常量池中这个是没有疑问的,但是String a = new String("abc"),肯定在堆中创建了一个对象,但到底有没有在常量池里也创建了一个对象就各有各说法了。
【 在 FromSixToTen 的大作中提到: 】
: new应该是在堆中,若是String str="abc";应该是在常亮池中,不知道说的对不对,有请@暖神指教。
常量池中有,反编译可以看到
【 在 HB0318 (站在风口的小猪) 的大作中提到: 】
: String str="abc";应该是在常量池中这个是没有疑问的,但是String a = new String("abc"),肯定在堆中创建了一个对象,但到底有没有在常量池里也创建了一个对象就各有各说法了。
叔,再问一下,这个比如String s = new String ("ab")+"c"创建4个对象?常量池中ab ,c,abc,然后堆中ab?
【 在 taoch 的大作中提到: 】
: 常量池中有,反编译可以看到
:
abc在不在常量池这个我不敢肯定。。
可以试试执行后s是否和 String s2 = "abc"相等
【 在 HB0318 (站在风口的小猪) 的大作中提到: 】
: 叔,再问一下,这个比如String s = new String ("ab")+"c"创建4个对象?常量池中ab ,c,abc,然后堆中ab?
肯定不相等吧,编译期无法确定s2
【 在 taoch 的大作中提到: 】
: abc在不在常量池这个我不敢肯定。。
: 可以试试执行后s是否和 String s2 = "abc"相等
:
【 在 HB0318 的大作中提到: 】
: 叔,再问一下,这个比如String s = new String ("ab")+"c"创建4个对象?常量池中ab ,c,abc,然后堆中ab?
这句话的实现不是先建立一个new String("ab"),然后建立一个StringBuilder,append("ab"),然后再append(c),最后再sb.toString()返回实例给s么?
好像是这个过程,但是产生了多少个对象捏。。。
【 在 lixing 的大作中提到: 】
: 这句话的实现不是先建立一个new String("ab"),然后建立一个StringBuilder,append("ab"),然后再append(c),最后再sb.toString()返回实例给s么?