【问题标题】:No parameter pass by reference in Java?Java中没有参数通过引用传递?
【发布时间】:2020-12-29 07:58:03
【问题描述】:

我遇到了一个简单的数组问题,需要其他程序员的指导。

import java.util.*;

public class ArrayExample {
    public static void main(String[] args) {
        double[] array2, array3;
        
        array2 = getArray();
        array3 = getArray();
        
        array2[0] = 99;
        
        System.out.println(Arrays.toString(array2));
        System.out.println(Arrays.toString(array3));
    }
    
    public static double[] getArray() {
        double[] array1 = {1,2,3};
        return array1;
    }
}

Here is the output:
[99.0, 2.0, 3.0]
[1.0, 2.0, 3.0]

据我了解,java 对象是通过引用传递的。但是,当我更改 array2 的第一个值时,为什么 array3 的值保持不变? 既然 array2 和 array3 都引用同一个数组,在本例中是 array1,array3 不应该也改变它的第一个值吗?

【问题讨论】:

  • 因为getArray方法每次调用都会创建一个新的数组实例。

标签: java pass-by-reference


【解决方案1】:

array2array3 不引用同一个数组,因为您通过调用 getArray() 来初始化它们,并且每次调用 getArray() 都会返回一个新的数组实例。

为了让它们引用相同的数组,您必须将代码更改为:

array2 = getArray();
array3 = array2;

或更改getArray() 以始终返回相同的数组:

private static double[] array1 = {1,2,3};
public static double[] getArray()
{
    return array1;
}

【讨论】:

  • 啊,有道理!谢谢伊兰。
猜你喜欢
  • 2017-09-25
  • 2013-05-16
  • 2010-10-07
  • 2011-08-21
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多