【发布时间】:2011-01-01 11:02:03
【问题描述】:
//key & hash are both byte[]
int leftPos = 0, rightPos = 31;
while(leftPos < 16) {
//possible loss of precision. required: byte, found: int
key[leftPos] = hash[leftPos] ^ hash[rightPos];
leftPos++;
rightPos--;
}
为什么在 Java 中对两个字节进行按位运算会返回一个 int?我知道我可以将它转换回字节,但这似乎很愚蠢。
【问题讨论】:
-
供参考:java.sun.com/docs/books/jls/third_edition/html/… 和 java.sun.com/docs/books/jls/third_edition/html/…。我不知道原因,所以我没有发布答案。
-
第二。我找不到任何描述为什么会发生上述情况的内容,只是确实如此。
-
类型提升有几个原因。对于按位运算,它比几乎所有其他运算的意义要小得多,但是 - 为什么不呢?您可以随时将其投射回去。
-
因为 Java 已经过于冗长,无法再进行一次不必要的转换。
标签: java casting byte numeric xor