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

时间:2013-09-30 12:30:51

标签: java

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

byte buffer[] = new byte[120];

4 个答案:

答案 0 :(得分:7)

答案 1 :(得分:6)

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

默认值列在JLS 4.12.5中,因此可以保证。


FROM 4.12.5。变量的初始值

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

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

  • 对于type short,默认值为零,即值为 (短)0

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

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

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

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

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

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

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

答案 2 :(得分:4)

语言 - 律师 - 完全基于Java语言规范的答案:

10.3. Array Creation

  

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

10.6. Array initializers

  

ArrayInitializer

     

{ VariableInitializers opt,opt }

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

15.10.1 Run-Time Evaluation of Array Creation Expressions

  

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

     

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

最后:

4.12.5. Initial Values of Variables

  

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

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

答案 3 :(得分:1)

为什么你没试过这个。

       byte buffer[] = new byte[120];
        for (int i = 0; i < buffer.length; i++)
        {
            System.out.println(buffer[i]);
        }    

请找参考资料

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