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

我们可以在Java中假设默认数组值吗?例如,假设一个int数组被设置为全零?,java,Java,在实践中,我是否可以假设Java中的所有int数组都将以零开头?对于运行JVM的所有机器 对所有类型都是这样吗?烧焦布尔值?枚举 在哪里有官方记录 我的课本上说int数组被设置为零,但他们也建议写一个for循环,将所有值设置为零,只是“为了更清楚”。是的。Java中的基元类型总是零初始化的。引用也被初始化为null。是查找此类信息的正确位置: 数组组件是未命名的变量,每当创建作为数组的新对象时,都会创建并初始化为默认值(§4.12.5) 默认值本身在中给出 对于类型byte,默认值为零,即(b

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

对所有类型都是这样吗?烧焦布尔值?枚举

在哪里有官方记录


我的课本上说int数组被设置为零,但他们也建议写一个for循环,将所有值设置为零,只是“为了更清楚”。

是的。Java中的基元类型总是零初始化的。引用也被初始化为null。

是查找此类信息的正确位置:

数组组件是未命名的变量,每当创建作为数组的新对象时,都会创建并初始化为默认值(§4.12.5)

默认值本身在中给出

  • 对于类型byte,默认值为零,即(byte)0的值
  • 对于类型short,默认值为零,即(short)0的值
  • 对于类型int,默认值为零,即0
  • 对于类型long,默认值为零,即0L
  • 对于类型float,默认值为正零,即0.0f
  • 对于类型double,默认值为正零,即0.0d
  • 对于类型char,默认值为空字符,即'\u0000'
  • 对于类型boolean,默认值为false
  • 对于所有引用类型,默认值为null

你的课本错了!编写这样的代码是毫无意义的,而且浪费了您键入代码和计算机运行代码的时间

正如其他人所说,编译器保证方法之外的变量(类/实例变量)的值为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”,那么它可以防止意外修改值,从而防止出现错误

我将编写如下代码:

final int x;

// some code that never uses x

x = 5;

// more code that only reads x and never modifies it.
这称为空final(声明时没有值的final变量)

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


我个人的做法是,在我发现需要修改它之前,总是将所有内容标记为final,并且在知道希望它具有的实际值之前,永远不要初始化变量。这样做可以使代码更快(因为赋值通常非常快,所以不明显)和更安全,因为我很少在不应该修改的时候意外修改值。

应该是Java语言规范。而不是第4.5.5节

对于byte类型,默认值为零,即(byte)0的值。
对于short类型,默认值为零,即(short)0的值。
对于int类型,默认值为零,即0。
对于long类型,默认值为零,即0L。
对于类型float,默认值为正零,即0.0f。
对于double类型,默认值为正零,即0.0d。
对于char类型,默认值为空字符,即“\u0000”。
对于布尔类型,默认值为false。

对于所有引用类型(§4.3),默认值为null。”

+1对于记录,这里是官方规范:这适用于数组值和字段,但不适用于局部变量。编译器要求你自己初始化它们。布尔值被初始化为false,而不是零。扔掉那些教科书。最糟糕的情况是,他们应该告诉你调用
Arrays.fill(myArr,0)
。但这仍然是一个荒谬的建议,如果这是一个清晰的问题,那么请插入一条该死的注释,不要做不必要的工作。Java语言保证将变量初始化为默认值(false、0、null,具体取决于类型)。没有必要手动初始化数组,这只是浪费CPU周期。那些教科书可能是由C/C++程序员编写的,新分配的数组有未定义的内容。Java努力避免未定义的行为。这就是当系主任指派C/C++教师在没有任何额外培训的情况下教授Java课程时所发生的情况,作者甚至可能是这样一位教师的学生。。。在这里我们讨论的是过时的假设。你能把空字符当作零吗?计算方面?回答得很好。我自己对此很好奇。