【问题标题】:why the int variable does not have the default value? [duplicate]为什么 int 变量没有默认值? [复制]
【发布时间】:2016-09-27 19:30:11
【问题描述】:

在我看来,int变量的默认值是0。但是,在我的这个演示中,变量num3没有初始化值。

class Solution
{
    static int num1;
    int num2;
    public static void main(String[] args){
        int num3;
        int[] nums = new int[5];
        System.out.println("num1: " + num1);
        Solution sol = new Solution();    
        System.out.println("num2: " + sol.num2);
        System.out.println("num3: " + num3);
        System.out.print("nums:");
        for(int item : nums)
            System.out.print(" " + item);
        System.out.println("");
    }
}

我在 Ubuntu16.04 上运行了我的演示。我得到的错误如下:

Solution.java:12: error: variable num3 might not have been initialized
        System.out.println(num3);
                           ^
1 error

如果我删除这行System.out.println("num3: " + num3);,我得到的结果如下:

num1: 0
num2: 0
nums: 0 0 0 0 0

如果有人知道原因,请告诉我。谢谢。

【问题讨论】:

  • 因为 Java。阅读规范。
  • 变量未初始化,因此没有任何值。
  • Java 不允许你有未初始化的本地变量。
  • "在我看来,int 变量的默认值是 0。"显然,Java 设计者有不同的看法。
  • 不能不初始化局部变量,否则会导致编译错误

标签: java initialization


【解决方案1】:

来自https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html(我的重点):

默认值

声明字段时并不总是需要赋值。 已声明但未初始化的字段将设置为 编译器的合理默认值。一般来说,这个默认 将为零或空,具体取决于数据类型。依靠这样的 然而,默认值通常被认为是糟糕的编程 风格。

...

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

【讨论】:

  • “然而,依赖这样的默认值通常被认为是糟糕的编程风格。”---过时的建议。 IntelliJ 实际上有一个警告“冗余初始化器,0 是默认值”。
  • @smarx 我认为我们也可以将数组nums 视为局部变量。但是,它似乎具有默认值。
  • @tqjustc array 没有默认值。它具有您分配的值 (new int[5])。
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多