黑马程序员技术交流社区

标题: 求答案 求解释 [打印本页]

作者: 汪叶庭    时间: 2013-1-12 09:46
标题: 求答案 求解释
String s = new String("xyz");创建了几个String Object?   
为什么答案是2个,不应该是1个么?
我是菜鸟,求大神们不吝赐教。
作者: 陈丽莉    时间: 2013-1-12 09:59
String s="xyz";这是创建了一个。而String s=new String(“xyz”);时,右面的new是创建了一个,然后左面的String s是又创建了一个s,指向“xyz”这个对象,所以是两个。
作者: 汪叶庭    时间: 2013-1-12 10:14
明白了 谢谢
作者: 林嘉健    时间: 2013-1-12 12:25
陈丽莉 发表于 2013-1-12 09:59
String s="xyz";这是创建了一个。而String s=new String(“xyz”);时,右面的new是创建了一个,然后左面 ...

这女生挺厉害的
作者: 惠晖    时间: 2013-1-12 12:59
陈丽莉 发表于 2013-1-12 09:59
String s="xyz";这是创建了一个。而String s=new String(“xyz”);时,右面的new是创建了一个,然后左面 ...

应该不是这个解释,  是new一个对象   还有个原因是用到了字符串池, 在字符串池里出现了”abc “这个对象

作者: 陈丽莉    时间: 2013-1-12 13:09
惠晖 发表于 2013-1-12 12:59
应该不是这个解释,  是new一个对象   还有个原因是用到了字符串池, 在字符串池里出现了”abc “这个对 ...

不要上来就否定别人的答案嘛~
是出现了“xyz”这个对象,然后s指向了它啊。
1、你的abc是别的题里面的。。。  根本没好好看题  - -||
2、你也没好好看我的回答就否定。。。  {:3_49:}
作者: yuchen208    时间: 2013-1-12 13:28
堆中创建一个对象
常量池一个堆对象引用常量池中的值
作者: 惠晖    时间: 2013-1-12 13:49
陈丽莉 发表于 2013-1-12 13:09
不要上来就否定别人的答案嘛~
是出现了“xyz”这个对象,然后s指向了它啊。
1、你的abc是别的题里面的。 ...

I'm sorry{:3_65:}
作者: 张云杰    时间: 2013-1-12 16:07
本帖最后由 张云杰 于 2013-1-12 16:11 编辑

解释应该是这样的, String s = new String("xyz");  原先的String s 会在堆区里存在,  new 的时候 又会申请一个内存区域 存放在你的堆区里, 然后 "xyz" 这个值在栈区里  ,  当你的s 指向新的对象的时候,  编译器会自动去寻找 与它所对应的值和类型,   所以s 指向 String("xyz"), 答案应该是2个
作者: 郝肖肖    时间: 2013-1-12 17:24
new 是创建对象的,只要new 了一下,就代表创建一个对象。另外,字符串也是一个对象。所以有二个对象。




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