Java学习之Java经典题目short a=1;a=a+1有何问题

举报
孙小北 发表于 2022/01/19 22:38:48 2022/01/19
【摘要】 Java中short a=1;a=a+1有何问题short a=1; a=a+1;由于a+1运算时会自动提升表达式的类型,即int类型,再将结果赋值给short类型的a时,类型会不匹配;short a=1; a+=1; java编译器会对+=进行特殊处理,进行了类型转换,通过反编译.class源码可以看到a+=1被编译为:a=(short) (a+1)代码:short a=1;//a= a+...

Java中short a=1;a=a+1有何问题

short a=1; a=a+1;

由于a+1运算时会自动提升表达式的类型,即int类型,再将结果赋值给short类型的a时,类型会不匹配;

short a=1; a+=1;

 java编译器会对+=进行特殊处理,进行了类型转换,通过反编译.class源码可以看到a+=1被编译为:

a=(short) (a+1)

代码:

short a=1;
//a= a+1;//类型不匹配:不能从 int 转换为 short
a=(short) (a+1);
a+=1;

数据类型自动转换规则:自动类型转换也叫隐式类型转换

byte --> short/char--> int  -->unsigned -->long -->double  -->float

注意:

  • byte和char、char和short之间需要相互强转;Boolean类型和其他基本数据类型之间不能相互转换。
  • 转换规则是先转换为高位数据类型再进行计算,结果是高位类型。
  • 如果采用+=、*=等运算符时,系统会自动强转类型为高位类型。
  • 所有的byte型、short型和char的值将被提升到int型。
  • 数据类型只会自动提升,不能自动降低

当编译器明确知道整数的运算结果没有到达int的表示范围时,byte、short或char类型的运算结果不会被自动提升为int类型

当编译器明确知道或不清楚整数的运算结果是否到达int的表示范围时,编译器将会自动将运算的结果转换成int,即使原来是byte、short或char类型。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。