我有一个相当简单但对我来说令人困惑的问题。 假设字节变量 a、b、c:
byte a = 5;
byte b = 3;
byte c = a + b; // wont compile
第 3 行无法编译,因为 - 我想 - Java 必须在幕后进行计算,并且计算的结果是一个整数。如果没有显式转换,则无法将整数传递给字节。所以应该提供 (byte)(a+b) 。但现在假设有第四行代码显式转换为整数...
c = (int) 8 ; // compiles
虽然字节变量“c”被显式转换为整数,但它仍然可以编译。 Java 是如何处理这方面的......?
最佳答案
您没有看到的是 a+b
是一个运行时操作,而 byte b = (int)8;
是一个编译时操作。因此,在编译时,编译器知道常量 8 可以放入一个字节中。因此,到 (int)
的显式转换被忽略。带或不带 (int)
字节码没有区别。
现在,在第一种情况下,如果两个字节变量都是final
(即常量),那么编译器将允许这样做:
public static void main(String[] args) {
final byte a = 5; // constant
final byte b = 3; // constant
byte c = a + b; // WILL compile;
}
关于java - 无法从 int 转换为 byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594985/