gpt4 book ai didi

java - java中的数组是按引用传递还是按值传递?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:27 24 4
gpt4 key购买 nike

Java 中的数组是按引用传递还是按值传递?

假设我有一个名为 data 的数组,其中包含某种类型的对象。现在让我们假设我将该数组传递并存储在 A 类中,然后将它传递给 B 类,B 类更改数组的一个条目。 A 类数组的版本会改变吗?如果这是一个基元数组(例如 int),这有关系吗? ArrayLists 呢?

最佳答案

Java 中的一切都是按值传递的。但是,如果您传递的是引用,则它是引用的值。

由于 Java 方法无法进入调用者的堆栈以重新分配变量,因此任何方法调用都不能更改那里的引用(地址)的标识。这就是我们说 Java 不是按引用传递的意思。这与 C++(和类似语言)形成对比,后者在某些情况下允许这样做。

现在让我们看看一些效果。

如果我这样做:

Object[] o = ...
mutateArray(o);

contents 之后可能会有所不同,因为所有 mutateArray 都需要一个数组的地址来更改其内容。但是,o 的地址将是相同的。如果我这样做:

String x = "foo";
tryToMutateString(x);

x 的地址之后又是一样的。由于字符串是不可变的,这意味着它仍将是 "foo"

改变一个对象就是改变它的内容(例如成功改变o的最后一个元素,或者试图改变“foo”的最后一个字母为“d”)。这不应与调用者堆栈中的重新分配 xo 混淆(不可能)。

call by sharing 上的维基百科部分可能会带来额外的启发。

关于java - java中的数组是按引用传递还是按值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138691/

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