gpt4 book ai didi

作为函数参数传递的 Java 对象

转载 作者:行者123 更新时间:2023-12-01 07:21:02 27 4
gpt4 key购买 nike

下列关于 Java 的说法正确还是错误?

在 Java 中,当类或对象的实例被指定为方法的参数时,就会创建该对象的副本

我知道 Java 中的函数是按值传递的,这意味着正在创建对象的副本?

但同时,如果 java 对象是引用并且您传递了一个引用,那么这与实际数据的副本不同,不是吗?

如果你传递一个引用,当引用被重新分配时,对象也会被重新分配,使得Java按引用传递而不是按值传递?

如你所见,我对此非常感到困惑

最佳答案

在java中,一切都是通过复制传递的。

原语通过副本传递。所以在函数内部改变它并不会反射(reflect)在外部。

对于对象传递给函数的是引用的副本(而不是对象的副本)。这意味着更改函数内部的属性,外部引用会看到修改,但更改引用本身(例如分配 null)不会反射(reflect)在函数外部。

<小时/>

按照一些例子来更好地解释。

改变原语的函数:

public void notChange(int a) {
a = 3;
// Here a is 3
}

int a = 0;

notChange(a);
// Here a is 0

对于改变对象内部内容的函数

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

对于更改对象引用的函数

public void changeReference(List<String> list) {
list = null;
}

List<String> list = new ArrayList<String>();
changeReference(list);
// Here list is not null

关于作为函数参数传递的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com