Java中的字节数组是否初始化为零?

And*_*eas 2 java

在以下行中,可以buffer假设用零填充?

byte buffer[] = new byte[120];
Run Code Online (Sandbox Code Playgroud)

def*_*ale 9

Language-lawyer-answer完全基于Java语言规范:

10.3. 数组创建

数组由数组创建表达式(第 15.10 节)或数组初始值设定项(第 10.6 节)创建。

10.6. 数组初始值设定项

数组初始化器

{ VariableInitializers opt ,opt }

因此,我们可以得出结论,您的表达式不是数组初始值设定项(它没有用大括号括起来)。所以我们转到数组创建:

15.10.1 数组创建表达式的运行时评估

...然后,如果出现单个 DimExpr,则创建指定长度的一维数组,并将数组的每个组件初始化为其默认值(第 4.12.5 节)。

否则,如果出现 n 个 DimExpr 表达式,则数组创建有效地执行一组深度为 n-1 的嵌套循环以创建隐含的数组数组。

最后:

4.12.5. 变量的初始值

...对于byte类型,默认值为0,即(byte)0的值。

所以答案是肯定的,任何 java 实现都应该用零初始化字节数组。


Jer*_*vel 7

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

a的默认值为byte0.

在此输入图像描述

  • 这只是答案的一部分。 (3认同)

Pet*_*rey 6

所有对象和数组都在构造时使用零或等效(null,false)初始化.

默认值列在JLS 4.12.5中,因此是有保证的.


从4.12.5.变量的初始值

每个类变量,实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9,§15.10):

  • 对于type字节,默认值为零,即(byte)0的值.

  • 对于short类型,默认值为零,即(short)0的值.

  • 对于int类型,默认值为零,即0.

  • 对于long类型,默认值为零,即0L.

  • 对于float类型,默认值为正零,即0.0f.

  • 对于double类型,默认值为正零,即0.0d.

  • 对于char类型,默认值为空字符,即'\ u0000'.

  • 对于boolean类型,默认值为false.

  • 对于所有引用类型(第4.3节),默认值为null.