强制类型转换
                            
                            
                            對(duì)兩個(gè)容量不一樣的數(shù)據(jù)類型的變量進(jìn)行算術(shù)運(yùn)算時(shí),java會(huì)自動(dòng)將小容量的變量進(jìn)行精度提升,然后再進(jìn)行運(yùn)算,得到的結(jié)果類型是提升后的大容量的數(shù)據(jù)類型.如果將該結(jié)果賦值給小容量的數(shù)據(jù)類型的變量,則必須進(jìn)行強(qiáng)制的類型轉(zhuǎn)換,否則編譯程序會(huì)報(bào)損失精度錯(cuò).如樓主示例,用i來表示1:
short?s1?=?1;
int?i?=?1;
首先,因?yàn)閟hort類型是16位的,而int類型是32位的,在進(jìn)行
(s1+i)?運(yùn)算時(shí),自動(dòng)將s1提升到32位,然后與i相加,得到的結(jié)果是32位的,而此時(shí)
s1=s1+i;?必然報(bào)錯(cuò),因?yàn)槿绻x值成功,只是把低16位賦給了s1,這個(gè)雖然正是樓主想要的結(jié)果,但是編譯程序卻不能判定你的意圖是什么.
執(zhí)行強(qiáng)轉(zhuǎn):
s1=(short)(s1+i);?就沒問題了.
s1+=i;能編譯通過并得到正確結(jié)果,而?s1=s1+i;?卻報(bào)錯(cuò),是因?yàn)樗鼈儾⒉幌駱侵髡J(rèn)為的那樣是等價(jià)的,s1+=i的方式j(luò)ava會(huì)對(duì)i進(jìn)行窄化轉(zhuǎn)換,由編譯程序自動(dòng)執(zhí)行.
java規(guī)范中說:
E1?op=E2?實(shí)際上等價(jià)于?:?E1=(T)(?(E1)op(E2)?)
其中T是E1的數(shù)據(jù)類型.這種類型轉(zhuǎn)換或者是一個(gè)恒等轉(zhuǎn)換,或者是一個(gè)窄化轉(zhuǎn)換.
這個(gè)說明java是一種強(qiáng)類型的語言,對(duì)數(shù)據(jù)類型的要求是非常嚴(yán)格的,否則會(huì)引起混亂.
下面解釋一下三種類型轉(zhuǎn)換:恒等轉(zhuǎn)換(相同容量的兩個(gè)數(shù)據(jù)類型之間的賦值);拓寬轉(zhuǎn)換(小容量類型賦值給大容量類型);窄化轉(zhuǎn)換(大容量賦值給小容量類型).?實(shí)際上,前兩種轉(zhuǎn)換都是編譯程序自動(dòng)執(zhí)行的,而窄化轉(zhuǎn)換則要求必須顯式的執(zhí)行.
                        
                        
                        short?s1?=?1;
int?i?=?1;
首先,因?yàn)閟hort類型是16位的,而int類型是32位的,在進(jìn)行
(s1+i)?運(yùn)算時(shí),自動(dòng)將s1提升到32位,然后與i相加,得到的結(jié)果是32位的,而此時(shí)
s1=s1+i;?必然報(bào)錯(cuò),因?yàn)槿绻x值成功,只是把低16位賦給了s1,這個(gè)雖然正是樓主想要的結(jié)果,但是編譯程序卻不能判定你的意圖是什么.
執(zhí)行強(qiáng)轉(zhuǎn):
s1=(short)(s1+i);?就沒問題了.
s1+=i;能編譯通過并得到正確結(jié)果,而?s1=s1+i;?卻報(bào)錯(cuò),是因?yàn)樗鼈儾⒉幌駱侵髡J(rèn)為的那樣是等價(jià)的,s1+=i的方式j(luò)ava會(huì)對(duì)i進(jìn)行窄化轉(zhuǎn)換,由編譯程序自動(dòng)執(zhí)行.
java規(guī)范中說:
E1?op=E2?實(shí)際上等價(jià)于?:?E1=(T)(?(E1)op(E2)?)
其中T是E1的數(shù)據(jù)類型.這種類型轉(zhuǎn)換或者是一個(gè)恒等轉(zhuǎn)換,或者是一個(gè)窄化轉(zhuǎn)換.
這個(gè)說明java是一種強(qiáng)類型的語言,對(duì)數(shù)據(jù)類型的要求是非常嚴(yán)格的,否則會(huì)引起混亂.
下面解釋一下三種類型轉(zhuǎn)換:恒等轉(zhuǎn)換(相同容量的兩個(gè)數(shù)據(jù)類型之間的賦值);拓寬轉(zhuǎn)換(小容量類型賦值給大容量類型);窄化轉(zhuǎn)換(大容量賦值給小容量類型).?實(shí)際上,前兩種轉(zhuǎn)換都是編譯程序自動(dòng)執(zhí)行的,而窄化轉(zhuǎn)換則要求必須顯式的執(zhí)行.
總結(jié)
                            
                        - 上一篇: 基于置信加权池的全卷积保证颜色恒常性
 - 下一篇: 强制卸载mysql关联程序