为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2019-12-04 11:06:40
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;


查看完整回答
反对 回复 2019-12-04
?
繁星coding

TA贡献1797条经验 获得超4个赞

JLS 5.6.2:Binary Numeric Promotion涵盖以下内容:


扩展原语转换(第5.1.2节)适用于转换以下规则指定的一个或两个操作数:


如果其中一个操作数是类型double,则另一个将转换为double。


否则,如果其中一个操作数为类型float,则另一个将转换为float。


否则,如果其中一个操作数为类型long,则另一个将转换为long。


否则,两个操作数都将转换为type int。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 590 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信