我理解为什么以下是错误的:
byte a = 3;
byte b = 8;
byte c = a + b; // compile error
Run Code Online (Sandbox Code Playgroud)
它不会编译.表达式总是导致int.所以我们应该做了明确的演员:
byte c = (byte) (a + b); // valid code
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么以下是正确的:
byte d = 3 + 8; // it's valid! why?
Run Code Online (Sandbox Code Playgroud)
因为字面整数(例如3或8)总是隐式的int.并且int-or-smaller表达式也总是导致int.谁能解释一下这里发生了什么?
我唯一可以猜到的是编译器将此表达式等同于以下内容:
byte d = 11;
Run Code Online (Sandbox Code Playgroud)
并不认为这是一个表达.
java ×1