[英]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++;
}
可能很簡單的問題,但我看不到
這是因為您使用的是原始整數,實際上是將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.