Java Array传递引用

时间:2012-01-27 23:45:57

标签: java arrays pass-by-reference

我有这段代码:

public static int MAX;
public static int MIN;


public static void startGame(){

    MIN = -1;

    MAX = 1;

    int[] randomGridVals = new int[ROWS*COLUMNS];

    fill(randomGridVals);

    System.out.println(Arrays.toString(randomGridVals));

    <MORE CODE>
}

private static void fill(int[] randomGridVals) {

    for(int i = 0 ; i < randomGridVals.length; i++)
    {
        int rnd = MIN + (int)(Math.random() * ((MAX - MIN) + 1));

        randomGridVals[i] = rnd;
    }

}

我希望数组通过引用传递,并且数组中有随机值,但是当我尝试将其打印为空时。为什么会这样?

3 个答案:

答案 0 :(得分:4)

很难从您提供的代码中确切地说出来。我会检查ROWS*COLUMNS的值。那可能是0,因此你创建了一个0大小的数组。

答案 1 :(得分:2)

Java is never pass by referenceIt's always pass-by-value

至于空白,请发布ROWS和COLUMNS或检查它们。

答案 2 :(得分:1)

你在哪里定义ROWS和COLUMNS?其中至少有一个必须等​​于0,将数据结构渲染为int [0]。

由于int是基本类型,因此您的数组开始填充0。由于数组无法调整大小,并且Arrays.toString将打印每个单元格(它不会只是跳过0s-0在int[]中通常非常重要,对于一件事!),这个结果不能是一个工件你的数组没有被写入。它必须已初始化为长度0,这意味着ROWS * COLUMNS == 0。检查ROWS的{​​{1}}的值,以及它们的类型 - 除了int以外的令人惊讶的类型可能会在极少数情况下导致这种情况,但0更有可能。