天上的云川 2020-08-17 11:05 采纳率: 100%
浏览 112
已采纳

关于java数据类型转换的问题

下面的这段代码为什么会报错
图片说明

      第五行显示报错

图片说明

这里我理解不了为什么会显示溢出
第五行在进行运算的时候右边的a和b同时提升为int数据类型,那么最终第五行右边得到的结果因该是一个为13的int的数据类型。但是右边转化为int数据类型之后并没有超过左边的数据类型范围,编译器不应该自动帮我进行强制转换吗?
假如是short result = 13;的话,右边是int类型,没写short进行强制转换,但是没有报错。

  • 写回答

4条回答 默认 最新

  • 王二小丷 2020-08-17 14:36
    关注

    你这是两个不同的操作

    short result = 13; 单纯赋值操作,数值是已经确定的,就是13,没有超过short范围,可以自动向下转型

    short result = a + b; 这是个运算,而且ab都是变量,最终结果到底是多少不确定,可能会超出short范围,所以编译器不会进行自动转型操作

    你需要知道,编译器只管编译,虽然会对代码进行一定优化,

    类似 short result = 5 + 8; 这样的完全确定的运算才会进行优化,

    但是带变量的这种数据运算显然并不是它的工作。

    赋值操作是在运行时才会进行的,也就是说ab的值需要到运行时才会确定下来,编译的时候就是个没有值的符号。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算