【问题标题】:Local variable array of ints defaults to zero [duplicate]整数的局部变量数组默认为零[重复]
【发布时间】:2018-05-22 03:00:00
【问题描述】:

为什么当一个“整数”数组作为局部变量时,它们默认为零?

       public static void main(String [] args) {
           int []arrayInts = new int[5];
           for(int i: arrayInts)
                System.out.println(i);
           //Prints out zeros 
       }

如果将“int”变量声明为局部变量,则它不会被初始化。

       public static void main(String [] args) {            
           int a;
            System.out.println(a);
           //Compilation error: The local variable a may not have been initialized
       }       

【问题讨论】:

  • 因为在 Java 规范中它的数组被初始化为零。局部变量不是(字段是)。
  • 对。基本上是因为“这就是它的工作原理。”稍微详细一点:因为 Java 规范是这样说的。局部变量总是未初始化,使用new 创建的数组总是初始化。 Java 在这方面是 100% 一致的。
  • 将数组值视为数组对象上的成员变量,它始终具有默认值。
  • 简短的回答是 new 关键字默认初始化所有用它创建的对象。默认情况下,“堆栈”分配的对象不会初始化,因为编译器可以在编译时检查是否存在在初始化之前使用堆栈变量的危险,对于动态分配内存的变量,情况并非如此。

标签: java arrays int local-variables


【解决方案1】:

这两个例子没有可比性。

在第一个中,您正在主动初始化您的数组。 The default value 对于整数数组是 0。

在第二个示例中,您没有显式地或隐式地初始化了变量a,并且您正在尝试使用它。 Java 会抱怨此操作。

【讨论】:

  • 对。这些例子似乎可以与新人相提并论,但事实并非如此。 new 很特别,可以做一些普通局部变量不能做的事情,比如初始化数组。即使只是一个小小的关键字,也有很大的不同。
  • @markspace:你忽略了一些重要的事情:赋值运算符。您可以整天在应用程序中 new 处理事情,而无需将其分配给变量。您可以声明变量而不给它们赋值。但是如果你尝试使用一个没有被赋值的变量,你将会遇到编译错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多