2010-01-15 108 views
12

我读过Java为类属性提供默认值,但不提供局部变量。那是对的吗?如果是这样的原因是什么?当你做得很好的时候,为什么不能一直这样做呢?实例变量和局部变量的默认值

感谢,
罗杰

+1

“初始变量值”的方便参考卡:http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.12.5 – trashgod 2010-01-15 22:26:20

+0

可能的重复[为什么是局部变量没有在Java中初始化?](http://stackoverflow.com/questions/415687/why-are-local-variables-not-initialized-in-java) – Raedwald 2014-03-11 13:08:00

+0

这里是一个[更新的链接](http://docs.oracle.com .com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5)作为trashgod的参考。 – jpaugh 2015-12-24 17:40:50

回答

24

标准局部变量都保存在栈上,而不是实际创建直到它们被初始化。如果没有使用局部变量,它不会进入堆栈。然而,成员变量分配在堆中,因此有一个默认的占位符(空引用或默认原语)。

+0

最好的解释 – 2015-10-12 12:09:38

1

的非技术原因的背后也可能是下列之一:

如果声明是为了与你用它做一个局部变量。用法与分配值相关。因此,访问已声明但未初始化的变量没有多大意义 - 程序员可能已经忘记初始化该变量。

但是,字段可能只能用于直到或在对象的生命周期的指定点之后。强制程序员初始化它们都不会好。