我知道如果我们对字节值执行算术运算,那么它会被隐式地提升为int并且结果将是一个int,因此我们需要将其显式转换为byte以便将结果存储在字节变量。 但我想问 -
EG- 代码是 -
public class Hello
{
public static void main(String[] args)
{
byte a=90;
}
}
答案 0 :(得分:5)
字节仍然是一个字节,并且由编译器静态输入。
JVM machine实现在int槽中保存单个字节(而不是字节数组)作为变量。并使用int opcodes进行算术。
编译器也会为一个字节分配一个final int
常量,只要它在-128,... 127的字节范围内。
答案 1 :(得分:3)
Java中的隐式类型转换是一种编译时机制。所以是的,它会显示超出范围的价值等错误。以下是关于此主题的很好的答案:
答案 2 :(得分:0)
编译器会将堆栈上声明的任何值裁剪为整数,如果它在范围内。
将值加载到操作数堆栈时,JVM会处理原语 小于整数的类型,就好像它们是整数一样。 因此,它对程序的字节码几乎没有影响 表示方法变量是否由例如a表示 短而不是int。相反,Java编译器会插入其他内容 字节码指令,用于将值裁剪到a的允许范围内 分配值时很短。在方法中使用整数短路 因此,主体可以产生额外的字节码指令 而不是大概优化程序。