問這樣一個原始問題的道歉。如何在java中實現int in/out參數
我寫了一個函數帶了一個參數;這個參數應該是一個輸入/輸出參數。
調試後,我意識到,由於在java中沒有明確的引用類型,我應該使用Integer對象(而不是int primitive)作爲參數類型。所以我改變了我的功能:
boolean getNextFoo(int currentFoo) {
currentFoo = currentFoo + 1;
}
到:
boolean getNextFoo(Integer currentFoo) {
currentFoo = currentFoo + 1;
}
檢查調試器中執行後,我意識到這有相同的結果以前。也就是說,我通過的對象getNextFoo()
不會更改。
問題1:如何使用Java實現in/out參數(更具體地用於基本類型)。我想(原諒我)對象總是通過引用傳遞。
問題2:我在互聯網上查找答案並閱讀Integer是不可變的。我理解不變的手段是不變的。如果是這樣,爲什麼編譯器(解釋器?)在getNextFoo
函數中做currentFoo = currentFoo + 1
時抱怨?
PS:我看到在Integer對象實際上沒有被傳遞到getNextFoo
調試器,而不是Integer.valueOf
值被傳遞到getNextFoo
這是留給我更糊塗了。
我猜想它正在用'(currentFoo + 1)'的值創建一個新的Integer實例。但是'整數'也是一個對象。如果我不能'myObject = myOldObject'來創建'myOldObject'的副本,編譯器如何創建一個也是對象的Integer副本?如果我的意圖是創建一個副本,我必須在myOldObject類中定義一個拷貝構造函數,以便能夠複製它。即使這樣,我也必須顯式調用myObject = new MyObject(myOldObject)來獲取副本。 –