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
3 回答

慕的地8271018
TA贡献1796条经验 获得超4个赞
编译器在做正确的事情。因为(a + b)可以超出字节变量中可以保留的最大值。如果您告诉编译器a,则使用'final'关键字不会更改b值,它不会再抱怨了。
final byte a = 1;
final byte b = 1;
byte c = a + b;

繁星coding
TA贡献1797条经验 获得超4个赞
JLS 5.6.2:Binary Numeric Promotion涵盖以下内容:
扩展原语转换(第5.1.2节)适用于转换以下规则指定的一个或两个操作数:
如果其中一个操作数是类型double,则另一个将转换为double。
否则,如果其中一个操作数为类型float,则另一个将转换为float。
否则,如果其中一个操作数为类型long,则另一个将转换为long。
否则,两个操作数都将转换为type int。
添加回答
举报
0/150
提交
取消