簡體   English   中英

為什么分配的Java變量的行為類似於參考?

[英]why is assigned java variable behaving like a reference?

嗨,我不知道是否已經有人問過這個問題,但這真是令人討厭...

好的,所以我有一個叫做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?
    }
}

如果我做錯了什么,請讓我知道,非常感謝!

在您的程序中,您有一個Test的SINGLE實例,您每次都只是用不同的名稱命名。

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);

在Test類中,您將創建一個始終為5的Test對象。因此,請取出在Test類中創建的Test對象,然后在main方法中使用以下代碼:

Test anotherNumber = new Test(5);
System.out.println(anotherNumber.number);
anotherNumber.number = 50;
System.out.println(anotherNumber.number);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM