Why can't my Java method change a passed variable?
This question already has an answer here:
References to objects are passed by value in Java so assigning to the local variable inside the method doesn't change the original variable. Only the local variable s
points to a new string. It might be easier to understand with a little ASCII art.
Initially you have this:
------------
| nullTest |
------------
|
null
When you first enter the method setNotNull you get a copy of the value of nullTest in s
. In this case the value of nullTest is a null reference:
------------ ------------
| nullTest | | s |
------------ ------------
| |
null null
Then reassign s:
------------ ------------
| nullTest | | s |
------------ ------------
| |
null "not null!"
And then leave the method:
------------
| nullTest |
------------
|
null
Java doesnt pass by reference, it passes the value of the reference. When you are assigning s="not null"
, you are reassigning that value.
I was hoping to do something like setNotNull(MyObject o) without using o = setNotNull(o)
Simply, you cannot. The closest you will get is something like this:
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());
which is all rather clunky, and probably not worth the effort.
链接地址: http://www.djcxy.com/p/3522.html上一篇: Java按值传递和按引用传递