为什么 Java 要求对最终变量进行显式强制转换(如果它是从数组复制的)
从以下代码开始...
byte foo = 1;
byte fooFoo = foo + foo;
当我尝试编译此代码时,我会收到以下错误...
错误:(5, 27) java: 不兼容的类型: 可能的有损转换从 int 到字节
...但如果是最终的...foo
final byte foo = 1;
final byte fooFoo = foo + foo;
文件将成功编译。
继续执行以下代码...
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
fooArray[0] = 127;
System.out.println("foo is: " + foo);
...将打印
foo is: 1
...这很好。该值将复制到最终变量,并且无法再更改。使用数组中的值不会更改 的值(如预期...)。foo
为什么以下需要演员阵容?
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
final byte fooFoo = foo + foo;
这与这个问题中的第二个例子有什么不同?为什么编译器给我以下错误?
错误:(5, 27) java: 不兼容的类型: 可能的有损转换从 int 到字节
怎么会这样?