将字节值转换为int

问题描述 投票:0回答:3

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

  • 从 byte 到 int 的转换是否发生在 被声明或者当我们在算术中使用它时它会发生 手术?因为我使用的java反编译器将其转换为 在声明时将 byte 转换为 int。那么,它是反编译器吗 有问题还是真的是这样。
  • 如果它确实发生在声明时,那么为什么要存储 超出字节范围的值表示错误?

例如- 代码是-

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

    }
}

反编译器的输出- Check this

java integer byte
3个回答
5
投票

一个字节仍然是一个字节,并且由编译器静态类型化。

JVM 机器 实现将单个字节(而不是字节数组)作为 int 槽中的变量保存。并使用 int 操作码进行算术。

还将

final int

 常量分配给字节将由编译器完成,只要它在字节范围 -128, ... 127 内即可。


3
投票
Java中的隐式类型转换是一种编译时机制。所以是的,它会显示诸如值超出范围之类的错误。这是关于这个主题的一个很好的答案:

运行时与编译时


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

摘自

infoq文章

将值加载到操作数堆栈时,JVM 会处理原语 小于整数的类型就好像它们是整数一样。 因此,它对程序的字节码没有什么影响 如果方法变量由例如 a 表示 短而不是整数。相反,Java 编译器会插入额外的 将值裁剪到允许范围的字节码指令 赋值时很短。在方法中使用整数上的短路 因此,主体可能会产生额外的字节码指令 而不是大概优化程序。

© www.soinside.com 2019 - 2024. All rights reserved.