【发布时间】:2015-04-08 17:40:23
【问题描述】:
我正在测试是否可以通过参数传递静态变量 x 来更改它的值,但我发现你不能那样做。
public class Test {
static int x;
static void changeX(int x_) {
x_ = 50;
}
public static void main(String args[]) {
changeX(x);
System.out.println(x);//it prints out zero because the static variable did not get changed
}
}
如果我们这样做,我们可以改变它:
public class Test {
static int x;
static void changeX(int x_) {
x = 50;
}
public static void main(String args[]) {
changeX(x);
System.out.println(x);
}
}
这意味着您必须直接引用静态变量才能更改它。好的。现在。我的问题是,有没有办法通过参数传递类变量来更改类变量,而不在实现中引用它?基本上,有没有办法以某种方式使用第一种方式?谢谢。
【问题讨论】:
-
不,至少不是原始类型或包装器
Integer类型。 -
Java总是按值传递。您不能通过函数调用更改传入的原始参数值。
-
我想如果你改变参数中的值,通过参数传递的值也会改变。 x.x 真的没有办法吗?如果能以某种方式完成,那将非常有用。
-
你可以使用反射来做到这一点
-
@nmelssx primitive 类型永远不可能通过函数调用更改外部值。您可以通过函数调用更新对象引用,但这仅适用于非不可变类型。您可以通过函数调用直接使用引用来更新对象引用(因为它指向相同的内存位置),但是您不能将参数重新分配给另一个对象引用并更新原始引用,因为 引用按值传递。
标签: java parameters reference parameter-passing