黑马程序员技术交流社区

标题: string [打印本页]

作者: qincai    时间: 2014-6-13 23:55
标题: string
本帖最后由 qincai 于 2014-6-14 09:32 编辑

String s=new String ("abc");
为什么产生了两个对象?

作者: ☆枫の云    时间: 2014-6-13 23:58
abc一个、s一个,这个回答好像有点水,哈哈,首先建了一个“abc”的字符串,然后建立了一个s引用对象指向“abc”,所以是两个对象。{:3_49:}
作者: qincai    时间: 2014-6-14 00:01
☆枫の云 发表于 2014-6-13 23:58
abc一个、s一个,这个回答好像有点水,哈哈,首先建了一个“abc”的字符串,然后建立了一个s引用对象指向“ ...

s不是个对象吧,s是个引用数据类型的变量
作者: alive    时间: 2014-6-14 00:04
因为字符串本身是一个对象,new String() 的时候会去常量池中去找“abc”对象,如果有的话,获得“abc”对象的地址,如果没有,就会在常量池中新建一个“abc”对象,把内存地址赋给new String(),而new String()本身也是一个对象,所以是两个对象
作者: ☆枫の云    时间: 2014-6-14 00:09
qincai 发表于 2014-6-14 00:01
s不是个对象吧,s是个引用数据类型的变量

额,确实弄错了,我在网上看了看:
String有个构造器,返回的是String对象;“abc”本身是一个String对象,构造出来的是这个String对象的副本。
public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

这样看应该是有两个字符串对象。
作者: 江祖贇    时间: 2014-6-14 00:17
对象1,"abc"
对象2,new String ("abc");
作者: Emperors    时间: 2014-6-14 00:23
alive 发表于 2014-6-14 00:04
因为字符串本身是一个对象,new String() 的时候会去常量池中去找“abc”对象,如果有的话,获得“abc” ...

赞同  我也是这样认为的
作者: woshihq    时间: 2014-6-14 00:23
☆枫の云 发表于 2014-6-14 00:09
额,确实弄错了,我在网上看了看:
String有个构造器,返回的是String对象;“abc”本身是一个String对象 ...

厉害!!!!!
作者: ゞ导火索゛    时间: 2014-6-14 00:52
首先new String(“abc”)这就表示在内存中开辟了一个空间,用s指向了该内存空间,这是一个对象,
其次字符串“abc”自身也是一个对象,该对象存放在字符串缓冲区中
作者: 18353666072    时间: 2014-6-14 01:14
都是大神啊
作者: Aron    时间: 2014-6-17 22:11
学习了啊




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