I was kind of baffled when I saw the following code did not work as expected.
I thought Java always passed variables by references into functions. Therefore, why can’t the function reassign the variable?
public static void main(String[] args) {
String nullTest = null;
setNotNull(nullTest);
System.out.println(nullTest);
}
private static void setNotNull(String s) {
s = "not null!";
}
This program outputs null.
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
spoints to a new string. It might be easier to understand with a little ASCII art.Initially you have this:
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:Then reassign s:
And then leave the method: