java中关于数据类型转换

比如bytei=1i=i+1就会错,因为没有数据转换,必须i=(byte)(i+1)而i+=1就是对的为何... 比如byte i=1
i=i+1就会错,因为没有数据转换,必须i=(byte)(i+1)
而i+=1就是对的
为何
展开
 我来答
百度网友6b46965
推荐于2016-08-31 · TA获得超过5583个赞
知道小有建树答主
回答量:957
采纳率:84%
帮助的人:426万
展开全部
你自己看看就明白了

可能有很多程序员认为i+=1只是i=i+1的简写方式,其实不然,它们一个使用简单赋值运算,一个使用复合赋值运算,而简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算结果转型为其左操作数的类型。看看以下的两种写法,你就知道它们的差别在哪儿了:
(1) byte i=5;
i+=1;
(2) byte i=5;
i=i+1;
第一种写法编译没问题,而第二种写法却编译通不过。原因就在于,当使用复合赋值运算符进行操作时,即使右边算出的结果是int类型,系统也会将其值转化为左边的byte类型,而使用简单赋值运算时没有这样的优待,系统会认为将i+1的值赋给i是将int类型赋给byte,所以要求强制转换。理解了这一点后,我们再来看一个例子:
byte b=120;
b+=20;
System.out.println("b="+b);
说到这里你应该明白了,上例中输出b的值不是140,而是-116。因为120+20的值已经超出了一个byte表示的范围,而当我们使用复合赋值运算时系统会自动作类型的转化,将140强转成byte,所以得到是-116。由此可见,在使用复合赋值运算符时还得小心,因为这种类型转换是在不知不觉中进行的,所以得到的结果就有可能和你的预想不一样。
斋如风0I5
2015-04-21 · TA获得超过598个赞
知道小有建树答主
回答量:453
采纳率:100%
帮助的人:276万
展开全部
具体的机理 我也不是很懂 但是网上相关的说法是 +=操作相当于是已经强制转换后再进行的验算,即:i+=1 等价于 i=(byte)i+1 所以不会报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
后视镜的的世界
2015-04-21
知道答主
回答量:73
采纳率:0%
帮助的人:13.4万
展开全部
i+=1是在byte类型的基础上加1

i=i+1是 i加1后(1是int),加完后,再赋值给i (byte) 实际上是将int类型的值赋值给byte
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式