黑马程序员技术交流社区

标题: new String("aaa"); 为什么会产生2个对象呢 ? [打印本页]

作者: jinhu358    时间: 2013-5-12 13:57
标题: new String("aaa"); 为什么会产生2个对象呢 ?
本帖最后由 jinhu358 于 2013-5-13 18:58 编辑

new String("aaa");    为什么会产生2个对象呢 ?     希望能详细说明下     
作者: 任江峰    时间: 2013-5-12 14:05
new String("aaa");
"aaa"是一个对象。(常量)
又new出一个内容是"aaa"的String类对象(堆内存对象)。所以是两个。
作者: 乎¤_¤乎    时间: 2013-5-12 14:05
“aaa”本身就是一个对象
new String(...);又new出来一个对象
作者: rosv    时间: 2013-5-12 14:05
一个对象是"aaa"还有一个匿名对象在堆中;
new String("aaa"); 这句话好像没有意义啊,你创建一个对象却不给它名字。。。
作者: jinhu358    时间: 2013-5-12 14:05
尹桥印 发表于 2013-5-12 14:00
两个
"aaa"是一个,放在常量池中
还有一个是被new出来放在堆中原实例对象

被new出来放在堆中原实例对象    是什么呢?  能说的再详细一点吗 ?  还是有些晕,不是太明白
作者: chouwayメ    时间: 2013-5-12 14:11
new String"abc"
1.先在常量池里寻找是否有abc的字符串,没有,创建出来。
2. new运算符,使得在堆内存中开辟空间,从常量池中复制出来。
所以有两个对象。
而如果是String a="abc",则只有一个。原因是只执行了上面步骤的第一步。
作者: jinhu358    时间: 2013-5-12 14:16
chouwayメ 发表于 2013-5-12 14:11
new String"abc"
1.先在常量池里寻找是否有abc的字符串,没有,创建出来。
2. new运算符,使得在堆内存中开 ...

你是说 new 运算符,在堆中开辟空间后,然后引用 常量池 里的地址吗?    是这样的吗?  
作者: jinhu358    时间: 2013-5-12 14:18
尹桥印 发表于 2013-5-12 14:13
这样说吧假如你的代码是:
String s=new String("aaa");
一个是"aaa",这个明白吧

恩恩 , 说的很明白    谢谢啦   !  
作者: chouwayメ    时间: 2013-5-12 14:23
jinhu358 发表于 2013-5-12 14:16
你是说 new 运算符,在堆中开辟空间后,然后引用 常量池 里的地址吗?    是这样的吗?   ...

不是的,
堆内存放的是可是对象。
作者: 、__WSD吴少东    时间: 2013-5-12 15:45
那个,相同的字符串,不是指存在一个么?  怎么就出来两个对象了???

new String(); 一般不都是将数字之类的转换成字符串进行一些便捷操作么?  干嘛还要将已经是字符串的"aaa" new String();  ???






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