在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數組:Java通過引用傳遞並按值傳遞?
- 8. Java數組傳遞通過引用
- 9. 的Java通過引用傳遞問題
- 10. 的Java通過引用傳遞INT
- 11. 通過引用傳遞參數Java
- 12. Java按值或通過引用傳遞?
- 13. Java日曆通過引用傳遞?
- 14. Java - 通過引用傳遞變量
- 15. 傳遞對象通過Java引用
- 16. 在C++中通過引用傳遞?
- 17. 在__clone中通過引用傳遞
- 18. 在perl中通過引用傳遞值
- 19. 在Python中通過引用傳遞
- 20. 在VB.Net中通過引用傳遞
- 21. 在Ruby中通過引用傳遞
- 22. 在AS3中通過引用傳遞
- 23. 通過引用傳遞與值傳遞
- 24. 通過引用傳遞C++
- 25. C++通過引用傳遞?
- 26. cpp通過引用傳遞
- 27. PHP通過引用傳遞?
- 28. C++通過引用傳遞
- 29. 通過引用傳遞流
- 30. JFrame通過引用傳遞
這是http://stackoverflow.com/questions/589919/doe S-java的傳遞通過引用 – Zxaos 2010-03-24 00:20:06