繁体   English   中英

Java 构造函数为变量赋值,然后交换它们

[英]Java constructors assingning value to variable and then interchanging them

以下代码的输出应该是什么,为什么? 输出结果是 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);
    }    
}

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

创建三个对象后,您会遇到这样的情况。

      /       \        /       \        /       \
      |       |        |       |        |       |
 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都是13 ,而t2.age17

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM