【问题标题】:Variable default value in JavaJava中的变量默认值
【发布时间】:2012-03-30 01:35:41
【问题描述】:

Java 中的每个类型在声明时都有一个原始值。文章 Primitive Data Types 包含对原始数据类型的描述。知道了这一点,为什么 Eclipse 会显示错误,告诉我变量可能尚未初始化?

如果我有,例如,

int x;
x++;

【问题讨论】:

  • 只有局部变量默认不初始化

标签: java variables


【解决方案1】:

来自参考:

局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化局部变量,请确保在尝试使用它之前为其分配一个值。访问未初始化的局部变量将导致编译时错误。

【讨论】:

    【解决方案2】:

    来自Java Language Specification,Java SE 8 版,4.12.5 Initial Values of Variables

    局部变量(第 14.4 节、第 14.14 节)必须在使用前通过初始化(第 14.4 节)或赋值(第 15.26 节)显式地赋予一个值,其方式可以使用明确的规则进行验证分配(§16(明确分配))。

    【讨论】:

      【解决方案3】:

      局部变量没有被初始化。

      这是一个局部变量:

      void aaa() {
          int x;
      }
      

      这是一个实例变量。这些会自动初始化:

      class X {
          int x;
      }
      

      【讨论】:

      • @Mansuro:也用于数组内容。
      • 静态变量也被初始化......据我所知,它是这样的:只有局部变量不会被初始化。并且数组内容会自动初始化。
      • 如果数组内容自动初始化,为什么尝试按索引访问元素时会出现NullPointerException?
      • @Mansuro - 这只发生在引用类型数组中,因为引用类型变量默认为null。尝试实例化 int[8] - 每个元素都是 0
      • 一个实例对象变量也将被初始化为空
      【解决方案4】:

      数据类型默认值(用于字段)

      字节 0

      短0

      int 0

      长0L

      浮动 0.0f

      双倍 0.0d

      char ‘u0000’

      字符串(或任何对象)null

      布尔假

      【讨论】:

      • 但问题是:“为什么 Eclipse 显示错误,告诉我变量可能尚未初始化?”
      • 如果声明的变量是类成员,它们将获得默认值,但是,局部变量不会获得默认值,因此 Eclipse 显示错误@PeterMortensen
      • 这应该在你的答案中。
      【解决方案5】:

      来自您提供的原始数据类型参考:

      “局部变量略有不同;编译器从不为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化局部变量,请确保在尝试使用它之前为其分配一个值。访问未初始化的局部变量将导致编译时错误”。

      【讨论】:

      【解决方案6】:

      您看到的不是错误,而是您的 Eclipse 偏好。您可以将其更改为忽略 Eclipse 首选项中未初始化的变量。

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 2014-09-19
        • 2011-09-22
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        相关资源
        最近更新 更多