Wil*_*iam 0 java function object pass-by-reference pass-by-value
以下关于Java的声明是假的吗?
在Java中,当一个类或对象的实例被指定为方法的参数时,正在创建该对象的副本
我知道Java中的函数是按值传递的,这意味着正在制作对象的副本?
但与此同时,如果java对象是引用并且你传递了一个引用,这不同于实际数据的副本不是吗?
如果你传递一个引用,当重新分配引用时,对象将被重新分配,使得Java传递引用不是按值传递的?
如你所见,我对此非常困惑
在java中,所有内容都通过副本传递.
原始文件通过副本传递.因此,在函数内部更改它不会在外部反映出来.
对于对象,传递给函数的是引用的副本(不是对象的副本).这意味着更改函数内部的属性外部引用会看到修改,但更改引用本身(例如,赋值为null)不会反映在函数外部.
按照一些例子来解释更好.
改变原语的功能:
public void notChange(int a) {
a = 3;
// Here a is 3
}
int a = 0;
notChange(a);
// Here a is 0
Run Code Online (Sandbox Code Playgroud)
用于更改对象内部内容的函数
public void changeContent(List<String> list) {
list.add("x");
// Here list has one more element
}
List<String> list = new ArrayList<String>();
// Here list has size 0
changeContent(list);
// Here list has size 1
Run Code Online (Sandbox Code Playgroud)
对于更改对象引用的函数
public void changeReference(List<String> list) {
list = null;
}
List<String> list = new ArrayList<String>();
changeReference(list);
// Here list is not null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |