Java:测试未初始化的字节

时间:2014-04-07 03:55:17

标签: java initialization byte

如何测试Java中未初始化的byte

这不起作用:

byte b;

if (b != null) {
   // Do something
}

3 个答案:

答案 0 :(得分:2)

没有“未初始化的byte”,因为编译器不允许您编写使用未初始化值的代码(注意:未明确赋值的字段是自动初始化为0 / false / null)。

您有几个选择。

您可以使用包装类型,可以是null,例如:

Byte b = null;

if (b != null) {
    ...
}

您可以使用特殊值,但必须确保它与有意义的值不重叠:

byte b = -1;

if (b != -1) {
    ...
}

你可以做一个上面的变体,但是有一个更大的类型(例如,InputStream.read()表示EOF),所以“魔术”值不能在有效范围内:

int b = -1;

if (b != -1) {
    // then b is in [0, 255] (unsigned byte in this example)
    ...
}

您可以存储指示初始化状态的第二个标志:

boolean bInitialized = false; 
byte b = 0; // arbitrary

if (bInitialized) {
    ... 
}

你也可以修改你的应用程序逻辑,以避免首先进行这项测试,老实说,这是我推荐的解决方案。

答案 1 :(得分:1)

Java语言规范说明了以下关于the initial value of variables

的内容
  

程序中的每个变量在其值之前必须具有值   使用:

     

[...]

     

必须明确赋予局部变量(§14.4,§14.14)一个值   在使用之前,通过初始化(§14.4)或赋值   (第15.26节),可以使用the rules for definite assignment (§16)验证。

因此,在给出这样的值之前,你不能使用变量的值。

此外,在您的示例中,b永远不会是null,因为它是原始类型,并且该代码段也不会因此而编译。

根据评论中的建议,您可以使用引用类型并将其设置为null以指示特殊情况。

答案 2 :(得分:0)

在编译时已知局部变量的初始化状态。据我所知,查询该状态没有语言功能。*此外,由于编译器在初始化之前不允许您读取局部变量,因此在运行时不会有任何运气任

*我想你可以尝试从中读取并查看编译器是否允许它来查询它。洛尔