A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海狮 中级黑马   /  2015-10-18 23:58  /  849 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 海狮 于 2015-10-19 00:23 编辑

=a+4a+=4有所不同
程序一:
class TestDemo{
public static void main(String[] arg){
short a =8;
a+=4;
System.out.println(a);//结果为12}}
程序二:
class TestDemo{
public static void main(String[] arg){
short a =8;
a=a+4;
System.out.println(a);}}
结果出现编译错误:
TestDemo.java:4: 错误: 不兼容的类型: int转换到short可能会有损失
a=a+4;
   ^
1 个错误
原因:执行s+=4;时。编译器自动把short类型的变量a转为int类型再参与运算,然后把int类型结果强制转换为short;而s=s+4;编译器不进行强制转换。所以int类型结果赋值给short类型出现错误。

13 个回复

倒序浏览
前者有强制类型的转换
回复 使用道具 举报
其实这个还不是太懂
回复 使用道具 举报
加油!加油!加油!加油!加油!加油!加油!加油!
回复 使用道具 举报
加油!加油!加油!加油!加油!加油!加油!加油!
回复 使用道具 举报
是后者有强制转换功能
回复 使用道具 举报
Hepburn 中级黑马 2015-10-19 13:02:12
7#
是这个道理!!!
回复 使用道具 举报
田策 中级黑马 2015-10-19 13:06:59
8#
后者有强制类型转换,开发建议用后者
回复 使用道具 举报
feng_ye 中级黑马 2015-10-19 13:14:16
9#
a+=4会强制转换类型,a = a+4;a+4会自动转换转成int类型
回复 使用道具 举报
田策 中级黑马 2015-10-19 13:34:40
10#
恩,格式是正确的
回复 使用道具 举报
编译器在执行的过程中无法判断变量s的值,s可能超过short的取值范围,所以会报错,损失精度
回复 使用道具 举报
看了你的代码,我很是头疼
回复 使用道具 举报
a=a+4;是变量和常量相加,系统会默认变量为int类型,当int类型的a加4以后还是一个int类型变量,将一个int类型的变量赋值给short类型时就会报错;a+=4;是先将a的类型转换为int类型,进行计算,然后相加,将计算结果赋值给short类型的变量,Java虚拟机会判断这个结果(常量)在不在short范围内,如果在,赋值成功。
回复 使用道具 举报
Sayman 中级黑马 2015-10-20 14:40:52
14#
a += 4 相当于  a = (short)(a+4)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马