簡體   English   中英

為什么我不能在void方法中增加整數

[英]Why I cannot increment integer in void method

我真的很困惑,為什么在這個小例子中i仍然是0:

public static void main(String[] args) {
    int i = 0;
    inc(i);
    System.out.println(i);
}

private static void inc(int i) {
    i++;
}

可能很簡單的問題,但我看不到

Java通過值傳遞參數。

因此,方法inci實際上只是main方法中“原始” i副本 您增加該副本 ,但對外部的原始變量i沒有影響。

有關更多詳細說明,請參見此問題

這是因為您使用的是原始整數,實際上是將i的值傳遞給inc而不是對i的引用。 在這種情況下,只需從inc方法返回一個值:

public static void main(String[] args) {
    inc i = 0;
    i = inc(i);
    System.out.println(i);
}

private static int inc(int i) {
    return i++;
}

當然,如果您要傳遞對象,那么您是通過引用傳遞的,因此您可以進行變異而無需返回。

如果你想工作。 您需要包裝類似以下的類:

class MyInt {
   int i;
}

然后繼續將MyInt的對象傳遞給“ inc”函數。 您將在其中執行以下操作:

    private static void inc(MyInt myInt){
      myInt.i++;
    }

這不是一個好習慣,這只是讓您知道,好方法嗎? 你把一個setter和getter並執行以下操作

myInt.setI(myInt.getI() + 1);

i的值作為副本傳遞到inc()方法,因此原始int i不會更新。

原始參數作為VALUE副本傳遞給方法。

對象參數作為參考的VALUE副本傳遞給對象。

您要嘗試通過引用傳遞參數,而這在Java中是不可能的。

在Java中,參數通常是由value傳遞的引用 對於本機類型,您可以假定它們是按值傳遞的。

這里將詳細討論該問題: Java是“按引用傳遞”還是“按值傳遞”? 在這里http://javadude.com/articles/passbyvalue.htm (這是我發現的最好的解釋)。

簡而言之,如果您不想編寫任何內容,則AtomicInteger類可能會有所幫助。

大聲笑...

暫無
暫無

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

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