首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认值发生了什么变化?

问默认值发生了什么变化?
EN

Stack Overflow用户
提问于 2015-02-22 12:25:50
回答 1查看 65关注 0票数 1

代码:

代码语言:javascript
复制
public class A {

    public static void main(String[] args) {
        int i;
        System.out.println(i);
    }

}

当我运行这段代码时,它不是打印int的默认值,即0,而是报错The local variable i may not have been initialized。

为什么以及如果初始化是强制的,那么为什么原始数据类型有默认值?它们可能和C++一样具有垃圾值。

EN

回答 1

Stack Overflow用户

发布于 2015-02-22 12:26:56

缺省值不用于局部变量,仅用于for a fields in a class

代码语言:javascript
复制
public class A {
    int i;

    public static void main(String[] args) {
        System.out.println(i);
    }

}

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

下表汇总了上述数据类型的默认值。

数据类型默认值(用于字段)字节0短0整型0长0L浮点型0.0f双0.0d字符'\u0000‘字符串(或任何对象) null布尔值false 局部变量略有不同;编译器从不为未初始化的局部变量赋值。如果无法在声明的地方初始化局部变量,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28654549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档