java - 当我们将数组作为参数传递给其他函数时,数组的值会如何变化?

标签 java arrays

当我将数组作为参数传递给函数时,原始数组会更改,但数组不应该更改,对吧?如有错误请指正。

下面我将 int x=10 作为参数传递给change(int a) 函数。 原始 int x 的值已更改。

那么相同的代码如何以不同的方式影响数组和 int 呢?

public  class Runy  {

public static void main(String [] args) 
{
    Runy p = new Runy();
    p.start();
}

void start() 
{
    long [] a1 = {3,4,5};
    long [] a2 = fix(a1);

    int x=10;
    int y= change(x);

    System.out.println(y);
    System.out.println(x);

    System.out.print(a1[0] + a1[1] + a1[2] + " ");
    System.out.println(a2[0] + a2[1] + a2[2]);

}

long [] fix(long [] a3) 
{
    a3[1] = 7;
    return a3;
}
int change(int a)
{
    a=a+1;
    return a;
}

}

最佳答案

你错了。您传入的不是数组 - 它是对数组的引用。数组是 Java 中的引用类型,因此 a1 的值(例如)不是数组对象 - 它是对数组对象的引用。

当您将该引用传递给 fix 时,参数 (a3) 具有与 a1 相同的值...该值引用相同的数组,因此在方法返回后对该数组的修改是可见的。此时,a1a2 将是相等的引用 - 它们都引用同一个数组。

关于java - 当我们将数组作为参数传递给其他函数时,数组的值会如何变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33139919/

相关文章:

java - BuildLabel属性是如何生成的?

javascript - 从回调函数内部访问 2D 数组 jquery 元素的索引

Javascript 对对象数组进行排序,使用显式声明,在使用变量时中断

javascript - 如何在 jQuery 中通过数组中的索引访问键的值?

java - 将一个字符串数组与多个字符串数组进行比较的算法

java - 是否有可能更有效地在 Java 中重建 String ?

java - 用于将 Java 类型映射到 Cassandra 类型的 DataStax API

java - Vaadin 为单个应用程序启动多个应用程序实例

java - 使用 Runnable 和 Thread 创建线程的区别?

Javascript 在数组中存储多个字段