猿问

是因为Java语言规则还是因为jvm导致字节加法转换为int?

byte a = 1;

byte b = 1;

byte c = a + b;

抛出错误:可能会损失精度


byte subt = a_s - a_b;

                ^

  required: byte

  found:    int

这是与jvm有关还是它是用Java语言定义的。


编辑:并且,如果它是用Java语言定义的,那么是否因为要记住jvm而这样做?


意味着如果Java支持byte数据类型,那么为什么会operation on byte结果int


扬帆大鱼
浏览 591回答 3
3回答

慕的地8271018

编译器在做正确的事情。因为(a + b)可以超出字节变量中可以保留的最大值。如果您告诉编译器a,则使用'final'关键字不会更改b值,它不会再抱怨了。final byte a = 1;final byte b = 1;byte c = a + b;

繁星coding

JLS 5.6.2:Binary Numeric Promotion涵盖以下内容:扩展原语转换(第5.1.2节)适用于转换以下规则指定的一个或两个操作数:如果其中一个操作数是类型double,则另一个将转换为double。否则,如果其中一个操作数为类型float,则另一个将转换为float。否则,如果其中一个操作数为类型long,则另一个将转换为long。否则,两个操作数都将转换为type int。
随时随地看视频慕课网APP

相关分类

Java
我要回答