在C++中,如果需要修改2個對象,則可以通過引用傳遞。你如何在java中完成這項工作?假設2個對象是基本類型,例如int。在Java中通過引用傳遞?
5
A
回答
12
你不行。 Java不支持傳遞對變量的引用。一切都通過價值傳遞。
當然,當按值傳遞對象的引用時,它將指向同一對象,但這不是通過引用調用。
0
使用泛型,你可以創建一個指針類,這將至少有點痛苦。你傳遞對象,改變它的value屬性,當函數退出時,你的對象將包含新的值。
MyPointerClass<int> PointerClass = new MyPointerClass<int>(5);
myFunction(PointerClass);
System.out.println(PointerClass.Value.toString());
// ...
void myFunction(myPointerClass<int> SomeValue)
{
SomeValue.Value = 10;
}
1
Java沒有引用傳遞,但您仍然可以從這些引用(它們本身通過值傳遞)中對象進行變異。
java.util.Arrays.fill(int[] arr, int val)
- 填充的int
陣列與給定值int
java.util.Collections.swap(List<?> list, int i, int j)
- 互換的列表的兩個元素StringBuilder.ensureCapacity(int min)
- 言自明
正如你可以看到,你仍然可以修改對象(如果它們不是不可變的);你不能通過將引用或基元傳遞給一個函數來修改它。
當然,你可以使它們成爲一個對象的域,並通過那些對象,並將它們設置爲任何你想要的。但是,這仍然沒有通過參考。
2
將它們包裝在一個對象中,然後將該對象作爲參數傳遞給該方法。
例如,以下C++代碼:
bool divmod(double a, double b, double & dividend, double & remainder) {
if(b == 0) return false;
dividend = a/b;
remainder = a % b;
return true;
}
可以在Java被重寫爲:
class DivRem {
double dividend;
double remainder;
}
boolean divmod(double a, double b, DivRem c) {
if(b == 0) return false;
c.dividend = a/b;
c.remainder = a % b;
return true;
}
雖然在Java中更慣用的風格是創建並從該方法返回該對象而不是接受它作爲參數:
class DivRem {
double dividend;
double remainder;
}
DivRem divmod(double a, double b) {
if(b == 0) throw new ArithmeticException("Divide by zero");
DivRem c = new DivRem();
c.dividend = a/b;
c.remainder = a % b;
return c;
}
相關問題
- 1. 在java中通過引用傳遞?
- 2. 通過Java中的值傳遞引用
- 3. 在java中傳遞值和通過引用傳遞
- 4. Java是通過值傳遞還是通過引用傳遞?
- 5. 傳遞對象通過Java引用
- 6. Java數組傳遞通過引用
- 7. 通過引用傳遞參數Java
- 8. 在Python中通過引用傳遞
- 9. 在AS3中通過引用傳遞
- 10. 通過引用傳遞與值傳遞
- 11. 通過引用傳遞流
- 12. 通過引用傳遞LPCWSTR
- 13. C++通過引用傳遞?
- 14. 爲什麼在java中沒有辦法通過引用傳遞
- 15. 你可以在Java中通過引用傳遞嗎?
- 16. 在java中通過引用傳遞枚舉
- 17. 在java中被參數通過引用或值傳遞
- 18. 在Java中通過引用與值傳遞
- 19. 通過引用傳遞引用?
- 20. JNA對象是通過引用還是通過java代碼中的值傳遞
- 21. C++通過引用傳遞對象
- 22. 指針和通過引用傳遞C++
- 23. 通過引用傳遞熊貓DataFrame
- 24. 通過引用傳遞父級PHP類
- 25. 通過引用傳遞錯誤結尾
- 26. 如何通過引用傳遞Generic :: List?
- 27. 通過引用傳遞數據成員
- 28. .NET如何通過引用傳遞類?
- 29. 如何通過引用傳遞結構?
- 30. 通過引用傳遞TCL - 線程?
這是http://stackoverflow.com/questions/589919/doe S-java的傳遞通過引用 – Zxaos 2010-03-24 00:20:06