有2字节数组: 私有(private)字节[] mData;
及方法:
public void setWord(final short pData) {
mData[0] = (byte) (pData >>> 8);
mData[1] = (byte) (pData);
}
我编写了简单的测试:
public void testWord() {
Word word = new Word();
word.setWord((short) 0x3FFF);
Assert.assertEquals(0x3F, word.getByte(0));
Assert.assertEquals(0xFF, word.getByte(1));
}
第二个断言失败,并显示消息“预期为 255,但实际为 -1”。 我知道,0xFF 带符号的短实际上是 -1,但为什么 JUnit 认为它们不相等?那么,实现此类的正确方法是什么?
最佳答案
Java不支持无符号类型,因此为了使值成为255,它必须不是有符号字节,它无法保存255的值。0xFF常量值将被视为有符号int,为了进行比较,字节值 0xFF 也将转换为 -1 的 int。
您需要将文字 0xFF 类型转换为字节。将断言更改为 Assert.assertEquals((byte)0xFF, word.getByte(1));
然后左侧和右侧的计算结果均为 -1。
关于Java - 无符号值的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432410/