我明白为什么以下是错误的:
byte a = 3;
byte b = 8;
byte c = a + b; // compile error
它不会编译。表达式总是产生一个int
. 所以我们应该进行显式转换:
byte c = (byte) (a + b); // valid code
但我不明白为什么以下是正确的:
byte d = 3 + 8; // it's valid! why?
因为文字整数(例如 3 或 8)总是隐含的int
. 并且int-or-smaller
表达式总是导致int
太。谁能解释这里发生了什么?
我唯一能猜到的是编译器将此表达式等同于以下内容:
byte d = 11;
并且不认为这是一种表达方式。