下面的代码运行输出“0.0 0.0 null null null null null”。
说明了类的成员变量均会被初始化,说明new了以后,会分配内存。可是,如果再声名一个对象XiyoujiRenwu suwukong = new XiyoujiRenwu();让suwukong = zhubajie;此时,是不是suwukong与zhubajie根本就是一模一样的东西?
是不是原先分配给suwukong的内存就释放了?

class XiyoujiRenwu
{
float height, weight;
String head, ear, hand, foot, mouth;
void speak(String s)
{
System.out.println(s);
}
}public class Example4_3
{
public static void main(String[] args)
{
XiyoujiRenwu zhubajie; //声名对象
zhubajie = new XiyoujiRenwu(); //为对象分配内存,使用new运算符和默认的构造方法
zhubajie.head = "null"; //人工控制的null
System.out.println(
zhubajie.height
+ " " + zhubajie.weight
+ " " + zhubajie.head
+ " " + zhubajie.ear
+ " " + zhubajie.hand
+ " " + zhubajie.foot
+ " " + zhubajie.mouth
);
}
}

解决方案 »

  1.   

    是一样的东西
    分配的内存会等jvm做垃圾清理
      

  2.   

    這兩個變數名稱所代表的是同一個東西。
    原來suwukong的內存看JVM高興什麼時候收回了。
      

  3.   

    嗯  
    suwukong = zhubajie是将 zhubajie 的 内存地址 给了suwukong
      

  4.   

    XiyoujiRenwu suwukong = new XiyoujiRenwu();suwukong = zhubajie;
    suwukong 和 zhubajie 都指向 同一个内存,即就是一模一样的东西
    原来 的 suwukong 指向的内存 等待回收
      

  5.   

    1、是不是suwukong与zhubajie根本就是一模一样的东西?
    是一样的东西,它们都指向同一块内存区域
    2、是不是原先分配给suwukong的内存就释放了?
    没有立即释放,还是在那里,只不过没有引用指向原来的内存了,所以当垃圾收集器工作时,就会把这块内存回收
      

  6.   

    suwukong与zhubajie是一样的,指向同一内存区域,原来 的 suwukong 指向的内存 等待回收
      

  7.   

    一点点补充,楼上意思是原先指向suwukong的指针 等待回收
      

  8.   

    木有释放,要等JVM,时间不定
      

  9.   

    如果再没有别的东西引用它,那就是垃圾了,就看JVM什么时候高兴了,那它就被收拾了
      

  10.   

    java里面都是引用   如果当一块内存没有引用指向时  gc在某些时候就会回收  可以掉System.gc()通知垃圾回收器  但 不能确保一定回收 
      

  11.   

    XiyoujiRenwu suwukong,suwukong只是个引用。
    suwukong = zhubajie,那么这个时候,suwukong指向zhubajie所指向的内容。
    如果以前的sunwukong对象没有被别的变量引用,那么jvm会回收这个对象了。
      

  12.   

    原来的内存还作为垃圾数据保留着,若 JVM 内存吃紧时 GC 会进行清扫工作,将这些垃圾内存回收掉,供 JVM 再次使用。