java中移位位时的不同行为

java中移位位时的不同行为,java,Java,我正在使用Java中的位移位,并拥有以下一段按预期工作的代码: final byte value = 1; final int shift = 1; byte result = value << shift; 这将导致编译错误: java: incompatible types: possible lossy conversion from int to byte 问题是导致此操作失败的方法是什么?,因为值和移位是此代码段中的编译时常量: final byte value = 1

我正在使用Java中的位移位,并拥有以下一段按预期工作的代码:

final byte value = 1;
final int shift = 1;
byte result = value << shift;
这将导致编译错误:

java: incompatible types: possible lossy conversion from int to byte

问题是导致此操作失败的方法是什么?

,因为
值和
移位是此代码段中的编译时常量:

final byte value = 1;
final int shift = 1;
byte result = value << shift;
编译器没有证据表明
shift
将表示这样的值,这不会导致精度损失,因此会引发编译错误


如果在这种情况下可以进行编译,那么您就可以执行
shiftAndCheck(1,32)
将导致溢出
字节
类型。

默认情况下,对非浮点数进行算术运算将生成
int
结果

私有无效移位检查(最终字节值,最终int移位){
    private void shiftAndCheck(final byte value, final int shift) {
        byte result = (byte) (value << shift);
    }

字节结果=(字节)(值
value
byte
类型,那么为什么消息从int到byte。值
value
是在应用shift之前还是之后升级到
int
的?因为默认情况下数字运算符(包括
I类型代码(函数))是当然,如果没有得到问题中提到的错误消息,我会得到类型不匹配:无法从int转换为byte(对于OSXconsider上Java 1.8.0_60上的行
byte result=value Am:
byte b=1+1;
是可以的,但是
byte b=byteVar+1;
不是。。。。
private void shiftAndCheck(final byte value, final int shift) {
  byte result = value << shift;
}
    private void shiftAndCheck(final byte value, final int shift) {
        byte result = (byte) (value << shift);
    }