short s=1;s=s+1;与short s=1;s+=1;的区别是什么?

作者&投稿:说皇 (若有异议请与网页底部的电邮联系)
short s=1;s=s+1;与short s=1;s+=1;的区别是什么请教请教各位大侠,谢谢了~~~

short s=1;
s=s+1;
自然是编译不通过的 提示损失精度
那么
short s=1;
s+=1;
为什么能编译通过那?
还有一个问题

隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换
而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换
所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),翻番来讲就是
s+=1 s = (s的类型)(s+1)

short s=1;s=s+1;
先计算s + 1,整数默认为int类型,所以 s+1的值为int类型,赋值给short类型的s(隐式类型转换),编译器提示丢失精度。
s += 1; 不是等价于 s = s + 1; 而是等价于 s = (s的数据类型)(s + 1);

s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换。所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1)。



short s=1;
s=s+1;
自然是编译不通过的 提示损失精度
那么
short s=1;
s+=1;
为什么能编译通过那?
还有一个问题

隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换
而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换
所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),翻番来讲就是
s+=1 <=> s = (s的类型)(s+1)


抚顺市19551013868: short s=1;s=s+1;与short s=1;s+=1;的区别是什么? -
吕虽麝香: s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换.所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = ...

抚顺市19551013868: short s=1;s=s+1;与short s=1;s+=1;的区别是什么请教请教各位大侠,谢谢了~~ -
吕虽麝香: short s=1; s=s+1; 自然是编译不通过的 提示损失精度 那么 short s=1; s+=1; 为什么能编译通过那? 还有一个问题 隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符,在解析时候s+=1就等价于s = (short)(s+1),翻番来讲就是s+=1 <=> s = (s的类型)(s+1)

抚顺市19551013868: 看下面的程序是否有问题,如果有问题,请指出并说明理由.61short s=1;s = s+1 -
吕虽麝香: short s=1;//无法编译 s=s+1;//答案:无法正常编译存在隐性转换,因此会自动提升到int类型,但原数据类型是short,所以需要强制转换// 正确答案是 s=(short)(s+1);------------------------------------------------------------------------ short s1=1; s1+=1; //同样都是s1=s1+1;// 至于这个是正常的,但是为什么我也不知道呢

抚顺市19551013868: java: short s=1; s=s+1 不能通过编译,而s+=1 可以,为什么了?? -
吕虽麝香: java: short s=1; s=(short)s+1 ,强制转换一下,因为1是int型,加上s后就变成int型了!把低的转化成高的.,所以s+1是int型!但是你定义的s是short ,所以要强制转换!

抚顺市19551013868: java,s+=1? -
吕虽麝香: 类型转换问题嘛,s是short型,s+1是short+int,java会自动将类型提升变换为int+int,所以得到的结果还是int,是无法将short=int+int的,需要做一个类型强制转换,s=(short)(s+1). s+=1的意思不能跟上面那样理解,它表示的就是每次自增1,就好像s++,++s一样,无非这里指定了你每次自增的值是多少,你也可以写成s+=2,s+=3都可以的

抚顺市19551013868: java语句中i++的意思 -
吕虽麝香: 你首先要分清i++ 和 ++i的区别: {int i=0; int j=i++;} {int i=0; int z=++i;} 运算过后,j=0;表明i++是指先把i赋值给j然后再自身加1; 运算过后,z=1;表明++i是指先自身加1后赋值给z; 总之记住++号在后面的意思是先赋值然后自身加1;++在前面的是先自身加1后赋值;

抚顺市19551013868: s=s+1与s+=1在计算机内部执行时的过程有什么区别 -
吕虽麝香: 1. 隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度.2. 必须进行显示类型转换而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+1的返回值是int,编译器自动进行了...

抚顺市19551013868: java基本类型转换问题. -
吕虽麝香: int、short、long都是整型,只是长度不一样. int可以表示32位长度的整数. short可以表示16位长度的整数. long可以表示64位长度的整数. 他们归根结底都是整数,所以short s=1;不会报错

抚顺市19551013868: 请高手指教:1为什么默认是int类型,而不是byte 或者short类型呢 ?short也是基本数据类型中的整型啊 -
吕虽麝香: 1默认不是int类型,默认是shot,long,shot,int、、、、、、,要想指定它是什么类型,就要声明它是什么类型.

抚顺市19551013868: java数据类型转换问题,面试例题3 -
吕虽麝香: 因为s是short类型的,1是int类型的所以s+1会转换成高位的int类型,s=s+1需要强制转换,s=(short)s+1,而s+=1会默认强制转换.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网