gpt4 book ai didi

java - 这个传递给方法的 Java 数组发生了什么?

转载 作者:行者123 更新时间:2023-12-02 18:59:17 24 4
gpt4 key购买 nike

我了解到,在 Java 中,数组是通过引用传递的,这意味着它们可以在函数内修改。然而,我最近遇到了这段令我困惑的代码,因为它似乎表现出不一致的行为。

import java.io.*;
import java.util.*;

public class TestProgram {

public static void fMethod(int[] f){
f[0] = 9;
f[1] = 7;
f = new int[4];
}

public static void main(String[] args){
int[] fParam = new int[3];
fMethod(fParam);
System.out.println(Arrays.toString(fParam)); // prints [9, 7, 0]
}
}

因为函数 fMethod()似乎将 f 重置为 new int[4]最后,我期望看到 [0, 0, 0, 0]打印到控制台。不过,好像只有f[0] = 9f[1] = 7实际执行了几行,而最后一行被忽略。我觉得这很奇怪。有人可以指出我正确的方向吗?

最佳答案

请记住:

In Java, everything is passed by value.

对于对象(数组也是对象),对象的地址()被复制到另一个变量中。

在您的代码中,int[] f 是一个局部变量(作用域在方法中),它最初引用原始数组,并且:

f[0] = 9;
f[1] = 7;

更改原始数组。

但是,然后您将一个 new 数组对象分配给 f,最终完全丢弃该对象(因为您不返回任何内容)。

只要 f 引用第一个数组,它就会改变该数组,因此,它只改变它的前两个元素。之后,f 指代其他内容。

但是,在您的 main 方法中,fParam 仍然引用前一个数组对象,并且您打印该对象,其中的第 3 个rd 元素,是整数数组的默认值 0。

关于java - 这个传递给方法的 Java 数组发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65801095/

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