表达式转型由下到上?

问答 Josiah ⋅ 于 2020-11-10 20:53:41 ⋅ 最后回复由 南无 2020-11-12 17:01:53 ⋅ 2013 阅读

有这样的一堆代码


byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2);  /*语句1*/
b6=b4+b5;    /*语句2*/
b8=(b1+b4);  /*语句3*/
b7=(b2+b5);  /*语句4*/
System.out.println(b3+b6);

为啥语句3是编译错误的呢?
b4是final 类型不可变,不可变的final byte b4 加上 自动提升为int的b1 这会是个什么结果

回复数量: 2
  • 宏牛
    2020-11-11 17:26:02

    用变量参与运算的需要运行时决定数据,运行期会提升为int运算,编译期能确定的字面常量值在编译期间就运算了!

  • 南无
    2020-11-12 17:01:53

    @宏牛 是不是编译器从数据安全的角度考虑,编译器认为byte变量的值有可能在运算时可能超出类型范围所以会报错(short、char同理)

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter