每次我想交換兩個值時,我必須使用臨時來做實際交換。 爲什麼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. 簡單的C++交換功能
- 3. 爲什麼Prelude的單詞功能不是簡單的書寫?
- 4. 爲什麼這個簡單的功能不起作用?
- 5. 爲什麼不是這個簡單的功能工作?
- 6. 表單提交的功能
- 7. 爲什麼softmax功能必需?爲什麼不簡單歸一化?
- 8. 爲什麼不能用SwitchPreference交換CheckBoxPreference?
- 9. 裝配 - 交換功能 - 爲什麼它不起作用?
- 10. 在Java中簡單交換
- 11. 爲什麼我不能通過php的curl提交表單?
- 12. 爲什麼我的jQuery表單不能重新提交?
- 13. 爲什麼我的表單不能自動提交?
- 14. 爲什麼這個簡單的java代碼不能編譯?
- 15. 多處理簡單功能不起作用,但爲什麼
- 16. 爲什麼託管語言不能提供手動刪除對象的功能?
- 17. 最簡單的Java SQL提供程序?
- 18. 簡單替換功能
- 19. 爲什麼不能用GET提交表單
- 20. 爲什麼我不能提交表單,即使沒有
- 21. 爲什麼表單不能阻止提交?
- 22. java中的portlet編程能爲我們提供什麼?
- 23. 爲什麼提供兩個獲取功能
- 24. 我的簡單類功能中的意外輸出。爲什麼?
- 25. 實現Serializable爲您提供什麼優勢而不是簡單的方法?
- 26. 何時在C++中提供自定義交換功能?
- 27. 爲什麼標準C++容器適配器不提供清晰的功能?
- 28. 爲什麼CMSIS不提供讀取IRQ啓用/禁用狀態的功能?
- 29. 功能提交
- 30. Java。簡單的線程操作交換
那麼,這有什麼問題?爲什麼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