Java构造函数将变量赋值,然后交换变量

时间:2018-03-05 23:54:37

标签: java

以下代码的输出应该是什么?为什么? 输出结果是131713.下面是代码。对象引用正在交换,因此值正在发生变化。

public class Test { 
    int age;
    String name;

    Test(int age,String name) {
        this.age=age;
        this.name=name;
    }

    public static void main(String[] args){ 
        Test t1 = new Test(17,"A");
        Test t2 = new Test(13,"B");
        Test t3 = new Test(14,"C");
        t3=t2;
        t2=t1;
        t1=t3;
        System.out.print(t1.age);
        System.out.print(t2.age);
        System.out.print(t3.age);
    }    
}

1 个答案:

答案 0 :(得分:0)

更改引用变量的值不会修改它引用的对象内的任何内容。但它可以使该变量引用不同的对象。变量独立于对象而存在。这可以如下图所示进行可视化。

创建三个对象后,就会出现这种情况。

      /       \        /       \        /       \
      |       |        |       |        |       |
 t1-> | 17  A |   t2-> | 13  B |   t3-> | 14  C |     
      |       |        |       |        |       |
      \       /        \       /        \       /

然后你改变t3指的是什么,所以你有

      /       \        /       \        /       \
      |       |   t2-> |       |        |       |
 t1-> | 17  A |        | 13  B |        | 14  C |     
      |       |   t3-> |       |        |       |
      \       /        \       /        \       /

然后你改变t2指的是什么,所以你有

      /       \        /       \        /       \
 t1-> |       |        |       |        |       |
      | 17  A |   t3-> | 13  B |        | 14  C |     
 t2-> |       |        |       |        |       |
      \       /        \       /        \       /

你改变t1指的是什么,所以你有

      /       \        /       \        /       \
      |       |   t1-> |       |        |       |
 t2-> | 17  A |        | 13  B |        | 14  C |     
      |       |   t3-> |       |        |       |
      \       /        \       /        \       /

然后你开始打印东西。如上面的最终图所示,t1.aget3.age都是13t2.age17