Wil*_*ill 7 java variables null pass-by-reference pass-by-value
当我看到以下代码没有按预期工作时,我有点困惑.
我认为Java总是通过引用将变量传递给函数.因此,为什么函数不能重新分配变量?
public static void main(String[] args) {
String nullTest = null;
setNotNull(nullTest);
System.out.println(nullTest);
}
private static void setNotNull(String s) {
s = "not null!";
}
Run Code Online (Sandbox Code Playgroud)
该计划输出null
.
Mar*_*ers 21
对象的引用在Java 中通过值传递,因此分配给方法内的局部变量不会更改原始变量.只有局部变量s
指向一个新字符串.用一点ASCII艺术可能更容易理解.
最初你有这个:
------------
| nullTest |
------------
|
null
Run Code Online (Sandbox Code Playgroud)
当您第一次输入方法setNotNull时,您将获得nullTest 值的副本s
.在这种情况下,nullTest的值是一个空引用:
------------ ------------
| nullTest | | s |
------------ ------------
| |
null null
Run Code Online (Sandbox Code Playgroud)
然后重新分配s:
------------ ------------
| nullTest | | s |
------------ ------------
| |
null "not null!"
Run Code Online (Sandbox Code Playgroud)
然后离开方法:
------------
| nullTest |
------------
|
null
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5885 次 |
最近记录: |