日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强制类型转换

發(fā)布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强制类型转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對兩個容量不一樣的數(shù)據(jù)類型的變量進(jìn)行算術(shù)運(yùn)算時,java會自動將小容量的變量進(jìn)行精度提升,然后再進(jìn)行運(yùn)算,得到的結(jié)果類型是提升后的大容量的數(shù)據(jù)類型.如果將該結(jié)果賦值給小容量的數(shù)據(jù)類型的變量,則必須進(jìn)行強(qiáng)制的類型轉(zhuǎn)換,否則編譯程序會報損失精度錯.如樓主示例,用i來表示1:
short?s1?=?1;
int?i?=?1;
首先,因為short類型是16位的,而int類型是32位的,在進(jìn)行
(s1+i)?運(yùn)算時,自動將s1提升到32位,然后與i相加,得到的結(jié)果是32位的,而此時
s1=s1+i;?必然報錯,因為如果賦值成功,只是把低16位賦給了s1,這個雖然正是樓主想要的結(jié)果,但是編譯程序卻不能判定你的意圖是什么.
執(zhí)行強(qiáng)轉(zhuǎn):
s1=(short)(s1+i);?就沒問題了.
s1+=i;能編譯通過并得到正確結(jié)果,而?s1=s1+i;?卻報錯,是因為它們并不像樓主認(rèn)為的那樣是等價的,s1+=i的方式j(luò)ava會對i進(jìn)行窄化轉(zhuǎn)換,由編譯程序自動執(zhí)行.
java規(guī)范中說:
E1?op=E2?實際上等價于?:?E1=(T)(?(E1)op(E2)?)
其中T是E1的數(shù)據(jù)類型.這種類型轉(zhuǎn)換或者是一個恒等轉(zhuǎn)換,或者是一個窄化轉(zhuǎn)換.
這個說明java是一種強(qiáng)類型的語言,對數(shù)據(jù)類型的要求是非常嚴(yán)格的,否則會引起混亂.
下面解釋一下三種類型轉(zhuǎn)換:恒等轉(zhuǎn)換(相同容量的兩個數(shù)據(jù)類型之間的賦值);拓寬轉(zhuǎn)換(小容量類型賦值給大容量類型);窄化轉(zhuǎn)換(大容量賦值給小容量類型).?實際上,前兩種轉(zhuǎn)換都是編譯程序自動執(zhí)行的,而窄化轉(zhuǎn)換則要求必須顯式的執(zhí)行.

總結(jié)

以上是生活随笔為你收集整理的强制类型转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。