【发布时间】:2018-10-08 16:01:32
【问题描述】:
如果我编译这个:
1 public class test {
2 public static void main (String args[]) {
3 byte bx = 1;
4 byte by = 2;
5
6 int iz = bx ^ by;
7 byte bz = bx ^ by;
8 byte cbz = (byte)(bx ^ by);
9 }
10 }
然后我得到这个错误:
test.java:7: error: incompatible types: possible lossy conversion from int to byte
bz = bx ^ by;
这使我得到了一个简短的journey 导致我决定 ^ 在按位上下文中总是导致int。我不明白为什么会做出这样的选择。
起初我认为这可能与装箱(或拆箱)有关,但我使用的是原始类型,所以我不认为这是我困惑的一部分。
我唯一能想到的是将 byte 提升为 int,但我还没有找到任何说明会发生这种情况的信息。
【问题讨论】:
-
这些并不是真正的重复,因为他们没有说“为什么”促销发生。我猜这是因为他们不必编写相同代码的 16 个不同版本来防止开发人员不得不进行看似不必要的转换。
-
@jeff6times7 answer in second link 确实试图解释更深层次的为什么,而不仅仅是下面的my answer,它基本上说:因为他们就是这样写的它在规范中。
标签: java