我在比较字节值时遇到了问题。理论上,以下代码片段应该返回true,但它返回false。
public static void main(String [] args) {
byte a = 3;
if (MpegUtil.isSlice(a) == true) {
System.out.print("Yes");
}
else System.out.print("No");
}
public static boolean isSlice(byte ID) {
if (ID >= 1 && ID <= (byte) 0xaf) return true;
else return false;
}
Run Code Online (Sandbox Code Playgroud)
该函数的作用isSlice是:接收一个字节,如果它在 1 和 af(十六进制)之间,则返回 true,否则返回值为 False。但不知怎的,它回答了 3,未能通过我的测试false。
有谁知道为什么这个功能不起作用?
编辑:感谢您提出删除“字节”转换的建议,它确实允许代码运行,但是一旦比较值优于或等于“0x80”,结果就会变回错误的“假”。我知道这是由于 Java 认为字节是有符号的(现在我真的很期待 Java 8),但是除了将条件更改为:之外,还会有任何“更干净”的版本吗?
if (ID != 0 && ID >= (byte) 0xaf && ID <= (byte) 0x7f) return true …Run Code Online (Sandbox Code Playgroud)