4

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

byte buffer[] = new byte[120];
4

4 回答 4

10

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。变量的初始值

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

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

于 2013-09-30T12:47:03.673 回答
10

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

a 的默认值为byte0。

在此处输入图像描述

于 2013-09-30T12:31:51.257 回答
8

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

JLS 4.12.5中列出了默认值,因此得到了保证。


从 4.12.5 开始。变量的初始值

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

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

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

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

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

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

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

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

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

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

于 2013-09-30T12:32:21.187 回答
-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

于 2013-09-30T12:33:01.480 回答