Java 将字节值转换为整数

Java 将字节值转换为整数,java,compiler-construction,int,byte,Java,Compiler Construction,Int,Byte,我知道,如果我们对字节值执行算术运算,那么隐式地将其提升为int,结果将是int,因此我们需要显式地将其转换为byte,以便将结果存储在byte变量中。 但我想问- 从字节到整数的转换是否发生在 是声明的还是在算术中使用时发生的 活动因为我使用的java反编译器将其从 在声明时将字节转换为int。那么,是反编译器吗 问题还是真的如此 如果它真的发生在声明时,那么为什么要存储 超出字节范围的值显示错误 乙二醇- 代码是- public class Hello { public stat

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

  • 从字节到整数的转换是否发生在 是声明的还是在算术中使用时发生的 活动因为我使用的java反编译器将其从 在声明时将字节转换为int。那么,是反编译器吗 问题还是真的如此
  • 如果它真的发生在声明时,那么为什么要存储 超出字节范围的值显示错误
乙二醇- 代码是-

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

    }
}
反编译器的输出-
Java中的隐式类型转换是一种编译时机制。因此,是的,它将显示错误,例如值超出范围。关于这个话题,这里有一个很好的答案:


一个字节仍然是一个字节,因此由编译器静态键入

在int插槽中保存单个字节(与字节数组相反)作为变量的实现。用于算术


此外,编译器还将为一个字节分配一个
final int
常量,只要它在字节范围-128。。。127.

如果堆栈上声明的任何值在范围内,编译器将其裁剪为整数

取自

将值加载到操作数堆栈时,JVM将处理原语 小于整数的类型,就好像它们是整数一样。 因此,它对程序的字节码几乎没有影响 表示,如果方法变量表示为,例如 short而不是int。相反,Java编译器插入额外的 字节码指令,用于将值裁剪到 赋值时短。在方法的 因此,body可以产生额外的字节码指令 而不是想当然地优化程序


它是在编译时计算的。链接的主题没有提到类型转换,我认为你没有公正地回答这个问题,所以我投了反对票。如何知道隐式类型转换在编译时发生?