将字节值转换为int

Viv*_*mar 3 java compiler-construction int byte

我知道如果我们对字节值执行算术运算,那么隐式地将它提升为int并且结果将是int,因此我们需要将其显式转换为byte以便将结果存储在字节变量中.但我想问 -

  • 从byte到int的转换是在声明它时发生的还是在我们在算术运算中使用时发生的?因为我使用的java反编译器在声明时将它从byte转换为int.因此,它是反编译器问题还是真的如此.
  • 如果它确实发生在声明时,那么为什么存储超出字节范围的值会显示错误?

例如 - 代码是 -

public class Hello
{
    public static void main(String[] args)
    {
        byte a=90;

    }
}
Run Code Online (Sandbox Code Playgroud)

反编译器的输出 - 检查一下

Joo*_*gen 5

字节仍然是一个字节,并且由编译器静态输入.

JVM机实现了保持单个字节在一个int槽(而不是一个字节数组)作为变量.并使用int操作码进行算术运算.

同样,final int为一个字节分配一个常量将由编译器完成,只要它在-128,... 127的字节范围内.