4

据我们所知,Java 对象的字段是这样初始化的:

  • 布尔变量获取false
  • 其他原始类型(如 int、byte、long)0
  • 对象得到null

我的问题是哪种机制(方法)在做这项工作,什么时候做?

4

1 回答 1

6

这些初始化是在 JVM 创建类的新实例时完成的。请参阅创建新类实例部分。它指出:

每当创建一个新的类实例时,都会为其分配内存空间,并为该类类型中声明的所有实例变量和该类类型的每个超类中声明的所有实例变量(包括所有可能隐藏的实例变量)分配空间( §8.3)。

如果没有足够的可用空间为对象分配内存,则类实例的创建会突然完成并出现 OutOfMemoryError。否则,新对象中的所有实例变量,包括在超类中声明的变量,都将初始化为其默认值(第 4.12.5 节)。

每种类型的实例变量的默认值如下:

  • 对于 type byte,默认值为 0,即 的值(byte)0
  • 对于 type short,默认值为 0,即 的值(short)0
  • 对于 type int,默认值为 0,即0
  • 对于 type long,默认值为 0,即0L
  • 对于 type float,默认值为正零,即0.0f
  • 对于 type double,默认值为正零,即0.0d
  • 对于 type char,默认值为空字符,即'\u0000'
  • 对于类型boolean,默认值为false
  • 对于所有reference types(第 4.3 节),默认值为null.
于 2013-04-02T19:18:26.777 回答