java自动类型转换的问题

qq_34643916 2016-11-16 03:05:54
short s = 123;
s = s-2;
s-=2;
在以上三行代码中,首先我定义了一个short类型的变量s,将123(int类型值)赋值给s时,自动转换为short类型,没有出错;
在第二行代码中s-2会转换为int类型,再次赋给short类型的s变量,就报错了,提示需要强转;
第三行代码却不会报错;
请问各位为甚么第二行会报错,第三行不报错,第一行、第三行可以自动转换?第二行为什么不可以?
...全文
360 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-11-18
  • 打赏
  • 举报
回复
我是海亮啊 2016-11-17
  • 打赏
  • 举报
回复
当运算的时候是过程师安int类型运算,,你这不规范
时小E 2016-11-17
  • 打赏
  • 举报
回复
主要是第二行右侧有算术运算,自动升型。右边的是升级为INT类型,左边的s还是short,所以报错。
  • 打赏
  • 举报
回复
1.你第一个123定义的数组在short类型范围内,那个123是个短整型数字 2.第二个右边运算的结果是一个int类型,左边刚才定义的s是short类型,左边好比一个碗,右边好比米饭,碗太小导致米饭装不进去 导致损失精度 3.第三个运算就是内部会自动转换, s+=2 会默认进行自动的类型转换,把 s+2 的结果强转成了short(即使损失精度),所以不会报错
伍六七AI编程 2016-11-16
  • 打赏
  • 举报
回复
到第三行就都是int型了,所以不会报错。 第二行s-2是int型,但是s是short型,所以要强转。
  • 打赏
  • 举报
回复
第一行,可以这样赋值,但必须在short的取值范围之内。 第二行,基本类型的算术运算会自动类型提升,2的字面量类型是int,运算后为int,等号两边类型不匹配。 第三行,赋值运算符,是在自身的基础上的运算
逗泥丸的平方 2016-11-16
  • 打赏
  • 举报
回复
简单来说 你只能
s = (short) s-2;
这样来保证了.......... 因为减法的时候就是当做int来处理的.... 你可以把 "-"当做一个特殊的方法,它的返回值就是int .... 去栈上兜了一圈,回来就变大了 就这样. 自己也可以测试一下..

        Object so = s-2;
        System.out.println(so.getClass());
至于-= 的话 实际上是在变量原有的位置上来操作的..所以还是他原来的类型

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧