java - 为什么该方法会更改传递的数组的值

标签 java arrays algorithm oop pass-by-reference

我正在对局部变量进行更改并返回它。我认为它应该在第 9 行打印 12。

public class HackerEarth {

    int a[]= {3,4,5};
    int b[]=foo(a);

    void display() {
        System.out.println(a[0]+a[1]+a[2]+ " "); //line no 9
        System.out.println(b[0]+b[1]+b[2]+ " ");
    }

    public static void main(String[] args) {
        HackerEarth he=new HackerEarth();
        he.display();
    }
    private int[] foo(int[] a2) {
        int b[]=a2;
        b[1]=7;
        return b;
    }
}

如有任何建议,我们将不胜感激。

最佳答案

您正在使用对第一个数组的引用来覆盖 foo 方法中的值。要根据传递的值创建另一个数组,请考虑使用 Arrays.copyOf :

private int[] foo(int[] a2) {
    int b[] = Arrays.copyOf(a2, a2.length);
    b[1]=7;
    return b;
}

关于java - 为什么该方法会更改传递的数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60578824/

相关文章:

java - Spring构造函数 Autowiring 和初始化其他字段

python - 指向 c_int 的 ctypes 指针与 c_int 数组

algorithm - 是否有一种校验和算法也支持来自它的 "subtracting"数据?

java - 关于 java 库文档的担忧

java - 如何使用 Maven 调用程序以编程方式设置 Artifact ID 和其他信息

c - argv是怎么填的?

arrays - 迭代循环时不能移出借用的内容

python - 在线性时间内寻找包含特定字符的最短子串

javascript - 最多水的容器算法 - 使用递归

java - getParameter 只返回字符串的一部分