我们可以假设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意外修改一个值,当我不应该。