为什么Java会为您初始化变量?

时间:2011-09-13 16:34:35

标签: java

public class test {
    public static void main(String[] args) {
        int MAX = 5;
        boolean bit[] = new boolean[MAX];
        float[] value = new float[2*3];
        int[] number = {10, 9, 8, 7, 6};
        System.out.println(bit[0]); // prints “false”
        System.out.println(value[3]);   // prints “0.0”
        System.out.println(number[1]);  // prints “9”
        }
    }

我正在测试上面的代码,为什么Java会为你初始化值?如果我不初始化我的变量,我认为应该抛出编译错误。另外,如果我想将它们全部初始化为0.0?

,我应该怎么做float[] value = new float[2*3];

4 个答案:

答案 0 :(得分:7)

静态和实例变量以及数组元素被初始化为默认值(0,false,'\0',null等)。默认情况下不会初始化局部变量。

在您的代码中,只有数组元素没有显式初始化 - 编译器很难确定您尝试使用的每个数组元素是否都已初始化。如果数组来自参数,您期望会发生什么?例如?

来自Java语言规范,section 15.10.1

  

然后,如果出现单个DimExpr,则创建具有指定长度的一维数组,并将该数组的每个组件初始化为其默认值(§4.12.5)。

(这就是你所处的情况 - DimExpr是你的3 * 2表达式。)

答案 1 :(得分:2)

您的浮点数组将隐式初始化为0.0。如果您尝试在方法中使用未初始化的变量,编译器将发出警告,但对象状态始终为默认值(除非您选择覆盖这些默认值)。您可以检查这些默认值对Java语言规范的影响。

答案 2 :(得分:0)

原始数据类型数组的元素会自动初始化为默认值:0.0floatfalseboolean等。未明确初始化。在value的情况下,该数组的元素应该已经初始化为0.0,因为这是默认值。

答案 3 :(得分:0)

Per @Kublai,由于浮点数的默认值为0.0,因此您的整个float []已经初始化为0.0。你不必做任何其他事情。这就是它为值[3]打印0.0的原因。