多维数组是否为零?

时间:2011-02-14 16:14:39

标签: java

这个related question的答案说一维数组是零。从我刚刚运行的一个小测试开始,似乎多维数组不是零输入。知道为什么吗?

The spec似乎指定多维数组的init等同于一组一维数组inits,在这种情况下,所有单元格都应为零。

我跑的测试相当于:

public class Foo {
  static int[][] arr;
  public static void bar() {
    arr = new int[20][20];

    // in the second run of Foo.bar(), the value of arr[1][1] is already 1
    // before executing the next statement!
    arr[1][1] = 1;
  }
}

4 个答案:

答案 0 :(得分:4)

不,多维数组零初始化就好了:

public class Foo {
  static int[][] arr;
  public static void bar() {
    arr = new int[20][20];

    System.out.println("Before: " + arr[1][1]);
    // in the second run of Foo.bar(), the value of arr[1][1] is already 1
    // before executing the next statement!
    arr[1][1] = 1;
    System.out.println("After: " + arr[1][1]);
  }

  public static void main(String[] args) {
    bar();
    bar();
  }
}

输出:

Before: 0
After: 1
Before: 0
After: 1

如果您仍有疑问,请找一个同样简短但完整的程序来证明问题:)

答案 1 :(得分:1)

似乎问题出在调试器或groovy运行时中。 我们讨论的是从IntelliJ中的groovy单元测试中调用的java代码。

看一下这个截图(查看手表和调试器所在的行):

enter image description here

答案 2 :(得分:0)

// in the second run of Foo.bar(), the value of arr[1][1] is already 1
// before executing the next statement!

不,不是。显示更多代码,运行时:

public class Foo {
  public static void main(String[] args) throws Exception {
    bar();
    bar();
  }
  static int[][] arr;
  public static void bar() {
    arr = new int[20][20];
    System.out.println(arr[1][1]);
    arr[1][1] = 1;
  }
}

我得到0两次。

答案 3 :(得分:0)

这是一个静态数组。 所以在第一次调用中它会将arr [1] [1]设置为1

在第二次调用中,就在重新初始化之前(arr = new int[20][20];before this line executed, the value will still be 1之前。

如果您正在检查当时的值,那么这是正常的。

如你所述,这只发生在第二次通话中,这对我来说很有意义。对于除第一个之外的所有呼叫,它将继续发生。 :)