有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么分配的java变量的行为类似于引用?

嗨,我不知道以前是否有人问过这个问题,但这真的很烦人

好的,我有一个叫做Test的类:

public class Test {
    public static Test testObject = new Test(5);//Creates a test object with an initialized value of 5;
    int number;
    public Test(int number){
        this.number = number;
    }
}

当然我的主课

public class Main {
    public static void main(String args[]){
        Test anotherObject = Test.testObject;//this is not a reference right?
        System.out.println(Test.testObject.number);//This prints 5
        anotherObject.number = 50;// changing anotherObject's number. NOT testObject's Number.
        System.out.println(Test.testObject.number);//if that was true this whould of still been 5, but it prints 50!!?? why does testObject's number even change if im not even changing that value?
    }
}

如果我做错了什么,请告诉我,非常感谢


共 (1) 个答案

  1. # 1 楼答案

    在你的程序中,你有一个Test的实例,你只是每次给它取不同的名字

    Test anotherNumber = Test.testObject;
    

    不创建新对象。它只引用同一个对象,你说“每当我写anotherNumber,我实际上是想写Test.testObject

    所以,当你以后改变anotherNumber.number = 50;时,你会:Test.testObject.number = 50;,因此当你打印Test.testObject时,你会看到50


    编辑:

    如果希望能够创建某个对象的副本,可以引入副本构造函数:

    public Test(Test original) { 
       this.number = original.number;
    }
    

    并与someOtherNumber = new Test(Test.testObject);一起使用