8

在下面的代码中,我有一个错误“发现精度可能丢失:需要 int:short”。我理解错误的含义,但我只是想知道为什么我会得到它。当然,该函数应该返回一种短类型(我看不出有什么精度损失,代码应该返回一个 16 位整数)。谁能帮我弄清楚为什么下面的代码似乎需要 int 类型?

static short a() {
    short[] payload = {
            100, 200, 300,
            400, 500, 600,
            700, 800, 900, 1000
    };
    short offset = 2;
    return (payload[offset - 2] << 8 & 0xff00) + (payload[offset - 1] & 0xff);
}

谢谢!

4

1 回答 1

16

short始终返回的Java 算术运算int,部分是为了防止溢出,部分是为了反映底层 JVM 字节码,它不区分对intshort或的算术运算byte。但基本上,(payload[offset - 2] << 8 & 0xff00)是一个int,它希望你把它重新转换成一个短的。

于 2012-04-14T22:12:32.893 回答