我们可以假设Java中的默认数组值吗? 例如,假设一个int数组被设置为全零?

在实践中,我可以假设Java中的所有int数组都将从零开始填充? 对于JVM运行的所有机器?

这对所有types都适用吗? 炭? 布尔? 枚举?

这正式logging在哪里?

教科书我说int数组设置为零,但他们也build议你应该写一个for循环设置所有的值为零只是“更清晰”。

Java语言规范是寻找这样的信息的正确的地方:

数组组件是未命名的variables,创build并初始化为默认值(§4.12.5),每当创build一个数组的新对象被创build

默认值本身在4.12.5节给出 。

  • 对于types字节 ,默认值为零,即(字节)0的值。
  • 对于shorttypes,默认值为零,也就是(short)0的值。
  • 对于inttypes,默认值为0,即0
  • 对于longtypes,默认值为0,即0L
  • 对于浮点types,默认值为正零,即0.0f
  • 对于doubletypes,默认值为正零,即0.0d
  • 对于chartypes,默认值是空字符,即'\ u0000'
  • 对于布尔types,默认值为false
  • 对于所有引用types,默认值为null

是。 Java中的原始types始终是零初始化的。 引用也被初始化为null。

它应该是Java语言规范§4.12.5variables的初始值 。 而不是§4.5.5

“对于字节types,默认值为零,即(字节)0的值。
对于shorttypes,默认值为零,也就是(short)0的值。
对于inttypes,默认值为0,即0。
对于longtypes,默认值为0,即0L。
对于浮点types,默认值为正零,即0.0f。
对于doubletypes,默认值为正零,即0.0d。
对于chartypes,默认值是空字符,即'\ u0000'。
对于布尔types,默认值为false。
对于所有的引用types(§4.3),默认值为空。

你的教科书是错的! 写这样的代码是毫无意义的,浪费你的时间打字和计算机运行它。

正如其他人所说,编译器保证方法(类/实例variables)以外的variables赋值为0,false或null。 正如你可能知道的,编译器不会在方法值中给variables,而是强制你在使用它们之前给它们一个值。

你会发现,如果你做的事情是“正确”的,那么在给予一个价值后,大约90%-95%的“variables”永远不会改变。 但是,新程序员倾向于这样做:

 int x = 0; // some code that never uses x x = 5; // more code that only reads x and never modifies it. 

这可以防止你能够将x标记为“final”。 如果你能够将x标记为“final”,那么它可以防止意外修改值,从而防止错误。

我会写这样的代码:

 final int x; // some code that never uses x x = 5; // more code that only reads x and never modifies it. 

这被称为空白的final(最后一个variables在声明时没有值)。

如果您还记得类/实例variables是由运行时初始化的,那么您希望不会编写代码来通过丢弃值来初始化它们,然后您可以将它们标记为final。

我个人的做法是始终把所有事情都标记为最终的,直到我发现我需要修改它,并且永远不会初始化一个variables,直到我知道我希望它具有的实际价值为止。 这样做使得代码更快(不明显,因为分配通常非常快),更安全,因为我很less意外修改一个值,当我不应该。