在实践中,我可以假定Java中的所有int数组都将以零填充开始吗?对于运行JVM的所有机器?
所有类型都适用吗?炭?布尔值?枚举?
正式记录在哪里?
我曾说过教科书将int数组设置为零,但他们也建议人们应该编写一个for循环将所有值设置为零,只是为了“更清晰”。
在实践中,我可以假定Java中的所有int数组都将以零填充开始吗?对于运行JVM的所有机器?
所有类型都适用吗?炭?布尔值?枚举?
正式记录在哪里?
我曾说过教科书将int数组设置为零,但他们也建议人们应该编写一个for循环将所有值设置为零,只是为了“更清晰”。
Answers:
Java语言规范是查找此类信息的正确位置:
数组组件是未命名的变量,每当创建一个作为数组的新对象时,它们都会创建并初始化为默认值(第4.12.5节)
默认值本身在第4.12.5节中给出。
- 对于byte类型,默认值为零,即(byte)0的值。
- 对于short类型,默认值为零,即(short)0的值。
- 对于int类型,默认值为零,即0。
- 对于long类型,默认值为零,即0L。
- 对于float类型,默认值为正零,即0.0f。
- 对于double类型,默认值为正零,即0.0d。
- 对于char类型,默认值为空字符,即'\ u0000'。
- 对于boolean类型,默认值为false。
- 对于所有引用类型,默认值为null。
应该是Java语言规范§4.12.5变量的初始值。代替§4.5.5
“对于字节类型,默认值为零,即(字节)0的值。
对于类型短类型,默认值为零,即(短)0的值。
对于类型int,类型为默认值为零,即0。
对于long类型,默认值为零,即0L;
对于float类型,默认值为正零,即0.0f;
对于double类型,默认值为正零。 ,即0.0d,
对于char类型,默认值为空字符,即'\ u0000';
对于boolean类型,默认值为false;
对于所有引用类型(第4.3节),默认值为空值。”
您的教科书是错误的!编写这样的代码是没有意义的,并且浪费了您键入代码的时间以及计算机运行它的时间。
正如其他人所说,编译器保证方法外的变量(类/实例变量)的值均为0,false或null。您可能知道编译器没有在方法值内提供变量,而是强迫您在使用它们之前给它们提供一个值。
您会发现,如果您做的事情“正确”,则大约有90%-95%的“变量”在赋值后就不会改变。但是,新程序员倾向于这样做:
int x = 0;
// some code that never uses x
x = 5;
// more code that only reads x and never modifies it.
这使您无法将x标记为“最终”。如果您能够将x标记为“最终”,则可以防止意外修改该值,从而避免错误。
我会这样写代码:
final int x;
// some code that never uses x
x = 5;
// more code that only reads x and never modifies it.
这称为空白final(最终变量,在声明时没有值)。
如果您记得类/实例变量是在运行时初始化的,那么希望您不要编写代码以使用抛弃值初始化它们,然后可以将它们标记为final。
我的个人实践是始终将所有内容标记为最终值,直到我发现需要对其进行修改为止,并且永远不要初始化变量,直到我知道所需的实际值为止。这样做可以使代码更快(由于分配通常非常快,因此不会引起注意)并且更安全,因为我很少在不应该修改时不小心修改值。
Arrays.fill(myArr, 0)。但这仍然是一个荒谬的建议,实际上,如果这是一个明确的问题,请加上一个该死的评论,请不要做不必要的工作。