簡體   English   中英

Java - 我可以乘以參考值嗎?

[英]Java - Can I multiply referenced values?

如果我有一個 class 如下,只是為了存儲一個值:

public class RefTest{
    private int value;

    public void setValue(int value){
        this.value = value;
    }

   public int getValue(){
        return value;
    }
}

並希望 RefTest b 始終是雙 RefTest a,我將如何處理 go? 目前我的值相等:

RefTest a = new RefTest();
a.setValue(5);
RefTest b = new RefTest();
b = a;
System.out.println("RefTest a: "+a.getValue());
System.out.println("RefTest b: "+b.getValue());
a.setValue(10);
System.out.println("RefTest a: "+a.getValue());
System.out.println("RefTest b: "+b.getValue());

但我不確定 go 如何將 b 設置為 2 a,因為“b=2 a”返回錯誤(如預期),並且 b.setValue(2*a.getValue()) 在 a 時不更新.setValue() 變化。

您想要完成的事情無法按照您實施RefTest的方式完成

您希望 a 和 b 表現不同的事實意味着它們實際上不可能是相同的RefTest object。

雖然要求有點奇怪,但從參考的角度來看,您需要實際存儲對 object(在本例中為 a)的參考,而不是不是參考的 int 值(該值是在您調用時計算和設置的設定值)。 您仍然需要做其他工作才能真正確保您的 getValue 始終是 a 值的兩倍。

您實際上需要定義兩個單獨的對象,其中 'b' 的行為將是變量(可以是對另一個對象的引用),如果它的 intValue 是該值的兩倍

如果您是 Java 的新手,請查看實例變量中 int 和 object 引用之間的差異,以及組合等模式(在這種情況下可以幫助您)

按照給定的RefTest定義,定義另一個 class,例如:

public class RefTestMultiple{
   private RefTest source;
   private int multiplier;

   RefTestMultiple(RefTest source, int multiplier) {
      this.source = source;
      this.multiplier = multiplier;
   }    

   public int getValue() {
        return multiplier * source.getValue();
   }

你可以像這樣使用它:

RefTest a = new RefTest();
RefTestMultiple b = new RefTestMultiple(a,2);
a.setValue(5);
System.out.println(b.getValue());

我不認為 b = a 正在做您認為正在做的事情。 你想要的是:

b.setValue(a.getValue());

對於 b = 2a 你想要的是:

b.setValue(2 * a.getValue());

實際上,當 a 的值發生變化時,b 的值不會更新。 這不是數學,這些是程序表達式。

暫無
暫無

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

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