我注意到如果我将数组声明为:
int[] myarr = new int[10];
Run Code Online (Sandbox Code Playgroud)
我可以直接使用myarr[1] ++;这样myarr[1] = 1.这是否意味着在Java中,我们并不需要初始化数组,并通过以下方法设置每个值为0?
for (int i = 0; i < myarr.length; i++) {
myarr[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)
我从一些评论中看到,该数组可能包含垃圾值.如果数组是整数数组,它是否包含0以外的任何垃圾?
Mat*_*nam 12
在Java中,所有数组元素都自动初始化为默认值.对于原始数字类型,那是0或0.0.对于布尔人来说,就是这样false.对于对象,那是null.
在其他语言(如C++)中,未初始化数组中的值未定义.对于安全性,一些编译器可能初始化为0/null,依赖于此是非常糟糕的做法.但是,这种行为在Java中已经很好地定义了,所以创建一个原始数组并相信值为0是完全可以的.
根据int[]语言规范,新初始化的将用零填充.
创建具有指定长度的一维数组,并将数组的每个组件初始化为其默认值(§4.12.5).
参见§4.12.5:
- 每个类变量,实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9,§15.10.2):
- 对于type字节,默认值为零,即(byte)0的值.
- 对于short类型,默认值为零,即(short)0的值.
- 对于int类型,默认值为零,即0.
- 对于long类型,默认值为零,即0L.
- 对于float类型,默认值为正零,即0.0f.
- 对于double类型,默认值为正零,即0.0d.
- 对于char类型,默认值为空字符,即'\ u0000'.
- 对于boolean类型,默认值为false.
- 对于所有引用类型(第4.3节),默认值为null.