请问大虾:
MyClass c1,c2,c3;
c1 = new MyClass();
c3 = new MyClass();
以上代码一共创建多少对象?
不知道如何用代码去判断?hasCode()应该可以吧? 我觉得答案是3 正确吗?

解决方案 »

  1.   

    应该是两个吧。
    如果你把MyClass类的Class对象也算上,那我还要说把加载那个类的ClassLoader对象也算上呢。嘿嘿。
      

  2.   

    怎么可能是 5 个,也不是 3 个。是两个,第一行只是声明了三个变量,实质就是三个变量指针,也就是说这三个变量只能指针 MyClass 的对象,目录,这三个变量暂时是空指针,未指向任何对象。而第二、三行,则通过 new 创建了两个对,让 c1、c2 不是空指针了。第一行代码,在内存分配情况如下:
    +------+
    | c1 |
    +------+
    | c2 |
    +------+
    | c3 |
    +------+第二、三行执行后,内存分布就变成下面这样的了:
    +------+    +---------+
    | c1 | -----> | MyClass |
    +------+    +---------+
    | c2 |
    +------+    +---------+
    | c3 | -----> | MyClass |
    +------+    +---------+
      

  3.   

    。。
    ls连图都用上了。
    只有new MyClass();才是对象
    答案是2个
      

  4.   

    呵呵,我不是抬杠。面向对象观点中int也是对象,java不把它当作对象处理,并不代表它不是对象。
      

  5.   

    建立了3个引用,new了2个内存空间!我感觉是这样的,我也刚学。
      

  6.   

    是3个引用 2个对象.
    图很说明问题.
    在这里补充一下,三个引用是局部变量,所以存放在java数据区的栈区中,
    对象放在java数据区中的堆区中.
      

  7.   

    String s = new String("xyz");创建了几个对象
      

  8.   

    比较基础,不过看过《Think in Java》的都知道是两个
      

  9.   

    引用是用来引用Java对象的。编译器的设计者有可能用面向对象的方式实现引用,但那完全是八竿子打不着的另一回事。
    编译器的设计者还完全有可能用面向对象的方式实现赋值运算符呢,难道也算对象?
      

  10.   

    2个,分析一下内存就很清楚了啊
    引用变量是存在栈内存中的,创建出来的实际的对象是存在堆内存中的
    开始声明的三个都是存在栈内存中,初始值都是为null,都没有指向实际的对象
    而后面通过new创建了两个对象,两个对象都是存在堆内存中,并且有相应的引用指向他
    所以实际创建的只有两个对象