这个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;
}
}
答案 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代码。
看一下这个截图(查看手表和调试器所在的行):
答案 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
之前。
如果您正在检查当时的值,那么这是正常的。
如你所述,这只发生在第二次通话中,这对我来说很有意义。对于除第一个之外的所有呼叫,它将继续发生。 :)