为什么“inti=2147483647+1;”OK,但是“字节b=127+1;”是不可编译的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

为什么int i = 2147483647 + 1;好吧,但是byte b = 127 + 1;不能编译吗?

提问于
用户回答回答于

常量计算为INT,因此2147483647 + 1溢出并为您提供一个新的int,该int可分配给int,同时127 + 1也被评价为int等于128,而且它不能分配给byte...

用户回答回答于

文字127表示int类型的值。文字1也是如此。这两者的和是整数128。在第二种情况下,问题在于你要将其赋值给一个类型为字节的变量。它与表达式的实际值无关。这与Java不支持矫顽器有关(*)。你必须添加一个类型

byte b = (byte)(127 + 1);

然后编译。

扫码关注云+社区