黑马程序员技术交流社区

标题: 创建对象 [打印本页]

作者: 曾辉    时间: 2012-2-11 15:00
标题: 创建对象
String s = new String("XYZ") + new String("XYZ");到底创建几个对象?

作者: 彭坤    时间: 2012-2-11 15:09
本帖最后由 彭坤 于 2012-2-11 17:15 编辑

3个,两次new String("XYZ")产生两个对象,给s赋值以后,相当创建了一个对象,1+2=3

做了个测试,把代码和结果贴上来供大家观摩
public class Test {
        public static void main(String[] args) {
               String s = "";
               System.out.println("s:"+s.hashCode());
               String s1 = new String("XYZ");
               String s2 = new String("XYZ");
               s=s1+s2;
               System.out.println("s1:"+s1.hashCode());
               System.out.println("s2:"+s2.hashCode());
               System.out.println("s:"+s.hashCode());

        }
}
-----------------------运行结果--------------------------
s:0
s1:87417
s2:87417
s:-1690640032

作者: 尹旗龙    时间: 2012-2-11 15:10
三个吧 两次new两个 必须的
一个+连接两个串算一个
对象放堆里面 s是对象引用 放代码区了
作者: 周平武    时间: 2012-2-11 15:15
三个 s的内容是XYZXYZ,有两个内容"XYZ"

使用new关键字 不管内存中是否存在该对象,都会在堆内存中划分一块区域储存

所以一个是存在于字符串池中的"xyz",两个是存在于堆内存中由栈内存中的s引用。

作者: 秦碧    时间: 2012-2-11 15:35
我认为是4个对象
毕老师视频里说过 String s=new String("abc");这里是创建了2个对象 一个为常量池中的"abc"一个为堆内存中的String对象
而 在String s = new String("XYZ") + new String("XYZ");中
第一个new String("XYZ")创建了2个对象 一个是常量池中的"XYZ" 一个为堆内存中的String对象
第二个new String("XYZ")又创建了1个对象 是堆内存中的一个新的String对象( 因为常量池中已有"XYZ"不需要再建立)
然后加起来对String s进行赋值 又是1个对象 s指向常量池中的"XYZXYZ"
作者: 最初的理想    时间: 2012-2-11 18:28
3或者4个,如果以前出现过"XYZ" 那么就三个对象,如果以前没有出现过 就是4个,原因大家都说了。




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