在Java中通过引用传递?
答
你不行。 Java不支持传递对变量的引用。一切都通过价值传递。
当然,当按值传递对象的引用时,它将指向同一对象,但这不是通过引用调用。
答
使用泛型,你可以创建一个指针类,这将至少有点痛苦。你传递对象,改变它的value属性,当函数退出时,你的对象将包含新的值。
MyPointerClass<int> PointerClass = new MyPointerClass<int>(5);
myFunction(PointerClass);
System.out.println(PointerClass.Value.toString());
// ...
void myFunction(myPointerClass<int> SomeValue)
{
SomeValue.Value = 10;
}
答
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)
- 言自明
正如你可以看到,你仍然可以修改对象(如果它们不是不可变的);你不能通过将引用或基元传递给一个函数来修改它。
当然,你可以使它们成为一个对象的域,并通过那些对象,并将它们设置为任何你想要的。但是,这仍然没有通过参考。
答
将它们包装在一个对象中,然后将该对象作为参数传递给该方法。
例如,以下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;
}
这是http://*.com/questions/589919/doe S-java的传递通过引用 – Zxaos 2010-03-24 00:20:06