package com.sing.tij.ch3;import static com.sing.tij.util.Print.*;
public class Assignment { public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 9;
t2.level = 47; println("1:t1.level:" + t1.level + ",t2.level:" + t2.level);
t1 = t2; println("2:t1.level:" + t1.level + ",t2.level:" + t2.level); t1.level = 27;
println("3:t1.level:" + t1.level + ",t2.level:" + t2.level);
}
}
class Tank {
int level;
}
请大家说出上面打印的结果println就是一个打印方法。
并说出原因。

解决方案 »

  1.   

    1:t1.level:9,t2.level:47//不解释
    2:t1.level:47,t2.level:47//t1=t2;t1指向t2指向的值
    3:t1.level:27,t2.level:27//改变t1,t2指向的共同的值
    内存分析
      

  2.   

    t1.level:9,t2.level:47显示值
    t1.level:47,t2.level:47//t1指向t2的对象
    t1.level:27,t2.level:27//t1 t2指向同一个对象,t1改变的对象也是t2的对象也跟着改变
      

  3.   

    t1.level:9,t2.level:47显示值
    t1.level:47,t2.level:47//t1指向t2的对象
    t1.level:27,t2.level:27//t1 t2指向同一个对象,t1改变的对象也是t2的对象也跟着改变
      

  4.   

    我的错了,唉,我以为t1和t2的指向对象为同一个,但t1和t2还是两个独立的对象,结果我错了..........
      

  5.   

    t1 = t2;
    t1和t2已经指向同一个对象了,所以无论t1和t2的改变,都会引起同样的变化
      

  6.   

    关键就是t1=t2吧,  对象赋值 不只值传递 而是内存地址的引用吧,所以当T1=T2时  他们使用的是同一个内存地址了   当操作T1或T2时等同于操作一个对象(内存地址)
    所以为
    t1.level:9,t2.level:47
    t1.level:47,t2.level:47
    t1.level:27,t2.level:27
      

  7.   


    Java codepackage com.sing.tij.ch3;importstatic com.sing.tij.util.Print.*;publicclass Assignment {publicstaticvoid main(String[] args) {
            Tank t1=new Tank();
            Tank t2=new Tank();
            t1.level=9;
            t2.level=47;        println("1:t1.level:"+ t1.level+",t2.level:"+ t2.level);
            t1= t2;        println("2:t1.level:"+ t1.level+",t2.level:"+ t2.level);        t1.level=27;
            t2.level=37;
            println("3:t1.level:"+ t1.level+",t2.level:"+ t2.level);
        }
    }class Tank {int level;
    }
    这样去运行一次你就明白了