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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

s1 = s1 + 1 中的1默认为int ,int 的数和short相加, 结果会被隐性强转为int类型,把int类型的数据赋值给short的时候,会有溢出的风险,使数据损失精度,所以应该写成s1 = (short)(s1 + 1 );
回复 使用道具 举报
有错,前者会发生数据溢出,而后者不会有数据的溢出,+=是java的运算表达式,会自动转换数据类型,而前者不会转换类型
回复 使用道具 举报
Ak-47 中级黑马 2016-3-30 00:25:43
23#
谢谢楼上的大婶们
回复 使用道具 举报
s1 = s1+1;会报错,这是因为在运算的时候,short类型的会自动提升为int类型,当两个int类型的相加得到的还是int类型的,把int类型的赋值给short类型需要强制转换,而这个没有转换,会有精度损失,修改为:s1 = short(s1+1);
回复 使用道具 举报
s1 = s1+1;会报错,这是因为在运算的时候,short类型的会自动提升为int类型,当两个int类型的相加得到的还是int类型的,把int类型的赋值给short类型需要强制转换,而这个没有转换,会有精度损失,修改为:s1 = short(s1+1);
而s1 += 1;不报错是因为这个隐藏了一个强制转换问题,等价于 s1 = short(s1+1);
回复 使用道具 举报
Ak-47 中级黑马 2016-3-31 01:13:09
26#
大婶们的回答很好啊,让我豁然开朗啊
回复 使用道具 举报
涨姿势了!
回复 使用道具 举报
你们的回答都是官方版本啊  {:2_30:}
回复 使用道具 举报
short s1=1;s1=s1+1;中s1是short型与1相加结果int型,会出错,第二个没错的
回复 使用道具 举报
1是int型,s1是short型,s1+1的结果也是int型,因为运算中的s1被默认提升为了int型,所以结果不能直接赋值给short型的s1,需要强制类型转换才能赋给s1。 s1 = (short)(s1 + 1);
回复 使用道具 举报
15614014298 来自手机 中级黑马 2016-4-6 10:49:21
31#
第一个是数据类型自动提升了
回复 使用道具 举报
short s1=1
s1+=1;

这样就不会有错,自加会在底层执行.
回复 使用道具 举报
short s1 = 1; s1 += 1;或者short s1 =1;s1=(short)(s1+1);
回复 使用道具 举报
很简单, 应为 shor  和byte  在进行运算的时候 , 会自动  转换成int 类型,  是
回复 使用道具 举报
fanxiaolin 发表于 2016-4-13 20:49
很简单, 应为 shor  和byte  在进行运算的时候 , 会自动  转换成int 类型,  是 ...

short s1 = 1; s1 = s1 + 1 ;
其实是这样的  

s1 是 short  类型  但是  1 是 int  类型  

如果  s1 写成int 类型 就不错了  
如果 真的要强转的话    加short 就是了!
回复 使用道具 举报
adomwon 发表于 2016-3-27 08:49
short s1 = 1; s1 = s1 + 1;编译时程序会报错,因为默认整数类型是int类型,,s1和1进行运算时,会先将s1自动类 ...

说的可以吗!
回复 使用道具 举报
定义的s1是short类型的,而1常量默认是int类型的,当执行s1 = s1 + 1;时,java虚拟机会提升右边s1的类型为int型进行运算,而算出的和是int,左边s1是short,int类型的范围比short类型范围大,所以赋值时,会产生精度丢失。编译失败。       而s1+=1;拆开是s1=(short)s1+1;,+=符号本身隐藏了强制转换,所以s1+=1;没有错。        
回复 使用道具 举报
定义的s1是short类型的,而1常量默认是int类型的,当执行s1 = s1 + 1;时,java虚拟机会提升右边s1的类型为int型进行运算,而算出的和是int,左边s1是short,int类型的范围比short类型范围大,所以赋值时,会产生精度丢失。编译失败。而s1+=1;拆开是s1=(short)s1+1;,+=符号本身隐藏了强制转换,所以s1+=1;没有错。        
回复 使用道具 举报
前者会进行自动转型   s1加1后  变成整数数据类型    后者不会报错
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;//计算时s1自动隐式向上转为int型,再赋值给s1时系统不能自动隐式向下转型,
short s1 = 1; s1 += 1;//不进行类型转换
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马