为什么我的Java方法不能更改传递的变量?
这个问题在这里已经有了答案:
对象引用通过Java中的值传递,因此分配给方法内的局部变量不会更改原始变量。 只有局部变量s
指向一个新的字符串。 用一点ASCII艺术可能会更容易理解。
最初你有这样的:
------------
| nullTest |
------------
|
null
当你第一次输入setNotNull方法时,你会得到s
中nullTest值的副本。 在这种情况下,nullTest的值是空引用:
------------ ------------
| nullTest | | s |
------------ ------------
| |
null null
然后重新分配s:
------------ ------------
| nullTest | | s |
------------ ------------
| |
null "not null!"
然后离开方法:
------------
| nullTest |
------------
|
null
Java不通过引用传递,它传递引用的值。 当您分配s="not null"
,您正在重新分配该值。
我希望做一些像setNotNull(MyObject o)而不使用o = setNotNull(o)
简而言之,你不能。 你会得到最接近的是这样的:
public class MyRef<T> {
private T obj;
public T get() {
return obj;
}
public void set(T obj) {
this.obj = obj;
}
public void setNotNull(T obj) {
if (this.obj == null) {
this.obj = obj;
}
}
}
MyRef<MyObj> ref = new MyRef<MyObj>();
ref.setNotNull(xyz);
System.err.println(ref.get());
这些都很笨重,可能不值得付出努力。
链接地址: http://www.djcxy.com/p/3521.html上一篇: Why can't my Java method change a passed variable?
下一篇: How does Arrays.sort() change the variable passed to it?