Java - 无符号值的奇怪错误

标签 java junit unsigned short

有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/

相关文章:

java - 如何在一个测试类中测试单例?

java - 我如何判断是否创建了任何mockito对象

c-preprocessor - c中的 "U"定义是什么意思(即#define FOO((uint32_t)1000U)))

c - 为什么我的程序永远重复而不是给出最大整数值?

java - 无法将数据从 Android 应用程序发送到远程数据库

java - 如何快速检查 double 是否适合 float ? ( java )

java - 如何在 Java 中仅替换/编辑特定单词?

java - 如何在 JUnit+Spring 测试中 Autowiring 并注入(inject)一次对象?

c - 在C中读取和写入无符号字符缓冲区到文件?

java - 如何在 Eclipse 中解析带有源 src-jar 库的类?