每次我想交換兩個值時,我必須使用臨時來做實際交換。 爲什麼Java不給我們在任何類中的設施方法來簡單地交換兩個變量的值?爲什麼Java不提供簡單的交換功能?
4
A
回答
12
Java是Pass-by-Value。這就是爲什麼你不能創建一個簡單的交換方法(ref)。
但是,您可以換另一個對象中的引用和swap的內部裁判:
public static void main(String[] args) {
Ref<Integer> a = new Ref<Integer>(1);
Ref<Integer> b = new Ref<Integer>(2);
swap(a, b);
System.out.println(a + " " + b); // prints "2 1"
}
public static <T> void swap(Ref<T> a, Ref<T> b) {
T tmp = a.value;
a.value = b.value;
b.value = tmp;
}
static class Ref<T> {
public T value;
public Ref(T t) {
this.value = t;
}
@Override
public String toString() {
return value.toString();
}
}
3
的Java不提供這樣的方法,因爲它是不可能的。 變量按值傳遞給方法。是的,即使這些是物體。在這種情況下,我們通過值傳遞對象的引用。因此,您無法在接收此變量的方法內改變源變量的值作爲參數:
int a = 5;
int b = 6;
swap(a, b);
// a is still 5, b is still 6!
void swap(int first, int second) {
int tmp = first;
first = second;
second = tmp;
}
相關問題
- 1. 爲什麼表單不能提交?
- 2. 爲什麼功能測試不夠?單元測試提供什麼?
- 3. 爲什麼這個簡單的AJAX PHP表單不提交?
- 4. 簡單的C++交換功能
- 5. 爲什麼Prelude的單詞功能不是簡單的書寫?
- 6. 爲什麼intellij不提供存儲SSH會話的功能
- 7. 兩種簡單的形式,爲什麼我不能提交我想要的?
- 8. 爲什麼我的簡單功能不起作用?
- 9. 爲什麼這個簡單的功能不起作用?
- 10. 爲什麼不是這個簡單的功能工作?
- 11. 爲什麼jquery不能正常提交?
- 12. 爲什麼提交按鈕不會調用控制器功能?
- 13. 爲什麼JavaScript onClick不會觸發jQuery提交功能?
- 14. 表單提交的功能
- 15. 爲什麼這個表單不提交?
- 16. 爲什麼softmax功能必需?爲什麼不簡單歸一化?
- 17. 爲什麼不能用SwitchPreference交換CheckBoxPreference?
- 18. 裝配 - 交換功能 - 爲什麼它不起作用?
- 19. 爲什麼我的表單提交代碼不能執行?
- 20. 爲什麼我不能通過php的curl提交表單?
- 21. 爲什麼我的表單不能在提交時驗證?
- 22. 爲什麼我的表單不能正確提交?
- 23. 爲什麼我的表單不能自動提交?
- 24. 爲什麼我的jQuery表單不能重新提交?
- 25. 爲什麼這個簡單的java代碼不能編譯?
- 26. 在Java中簡單交換
- 27. 多處理簡單功能不起作用,但爲什麼
- 28. 爲什麼託管語言不能提供手動刪除對象的功能?
- 29. 最簡單的Java SQL提供程序?
- 30. JQuery - 爲什麼不提交?
那麼,這有什麼問題?爲什麼Java沒有這個東西?詢問Java創作者。 – shift66 2012-03-01 11:06:42
請參閱http://stackoverflow.com/questions/3624525/how-to-write-a-basic-swap-function-in-java和http://stackoverflow.com/questions/2393906/how-doi-i- make-my-swap-function-in-java – 2012-03-01 11:10:02
@Ademiban更正你的語法。 – Juvanis 2012-03-01 11:10:26