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 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With