如何测试Java中未初始化的byte
?
这不起作用:
byte b;
if (b != null) {
// Do something
}
答案 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)
在编译时已知局部变量的初始化状态。据我所知,查询该状态没有语言功能。*此外,由于编译器在初始化之前不允许您读取局部变量,因此在运行时不会有任何运气任
*我想你可以尝试从中读取并查看编译器是否允许它来查询它。洛尔