Java基本之隱式轉換vs強迫轉換。本站提示廣大學習愛好者:(Java基本之隱式轉換vs強迫轉換)文章只能為提供參考,不一定能成為您想要的結果。以下是Java基本之隱式轉換vs強迫轉換正文
Java中,常常可以碰到類型轉換的場景,從變量的界說到復制、數值變量的盤算到辦法的參數傳遞、基類與派生類間的外型等,到處可見類型轉換的身影。Java中的類型轉換在Java編碼中具有主要的感化。
在界說變量時,有很多要留意的成績,一不當心就會湧現喪失精度或許不兼容類型等成績。
例如:
1.界說長整型數據時,必需加後綴l或L
long l =123456789012345L
2.界說單精度類型時(7-8位有用數字),必需加後綴 f 或 F
float f = 12.5F
3. boolean類型弗成以轉換為其它的數據類型。
這個中,我們經常會碰到數據類型的轉換成績,最為罕見的要屬隱式轉換和強迫轉換了,我們來剖析一下。
隱式轉換
特點:
從小到年夜,可以隱式轉換,數據類型將主動晉升。
byte,short,char -->int -->long -->float -->double
留意:long是8個字節,float是4個字節。
long是整數,float是浮點型,整數和浮點數的存儲規矩紛歧樣,記住一點long的規模是小於float的。
例 :
byte a=10;
int b=a;
當編譯intb=a 時, a隱式轉換為int類型。
強迫轉換
特點:
從年夜到小(假如你明白曉得數據是可以用該數據類型來表現的,可以用強迫轉換)
格局:
(轉換後的數據類型)變量或許值。
注:普通情形下,基本不推舉應用強迫類型轉換。
例1 :
int a=10; byte b=(byte)a;
當編譯 byte b=(byte)a時, a被強迫轉換為byte類型。
例2:
class QiangZhiDemo { public static void main(String[] args) { byte b=(byte)130; System.out.println(b); //打印成果-126 } }
解析:
數據130默許的是int類型的十進制數據,
第一步:十進制130轉換成二進制數據。
10000010
第二步:130在內存中的表現情勢以下
原碼:0000000000000000 00000000 10000010
第三步:求int130的補碼
由於130是負數,所以,反碼和補碼都和原碼分歧。
補碼:0000000000000000 00000000 10000010
第四步:對補碼停止截取,只剩下最初8位。
(byte)130 的補碼為:10000010
第五步:把該補碼轉化為原碼。
因為符號位(第一名)是1,故該數為正數,
反碼:10000001 (補碼-1)
原碼:11111110 (符號位不變,數據位取反)
轉化為十進制為 -126,所以終究打印-126。
例3 :
shorts = 1; s= s +1;
和
shorts = 1; s+=1;
有成績嗎?為何呢?
解析:
第一法式會報錯:毛病:不兼容的類型:從int轉換到short能夠會有喪失
緣由:s=s+1;s+1會隱式轉換為int類型,當把一個int類型賦值給short類型是,能夠會喪失。
第二個法式可以編譯運轉。
緣由:s+=1,固然可以看作s=s+1,然則照樣有差別的,s+=1中有一個強迫轉換,即s=(short)(s+1),會把s+1的值強迫轉換為short類型,故不會報錯。
小結:
數據類型轉換的成績假如產生在一些小法式上,我們也許可以或許一眼看出,可是當編寫一個宏大的體系時,具有宏大數據量時,這些小小的成績能夠招致體系失足乃至瓦解,所之前期代碼編寫的嚴謹性就得靠我們本身掌握了。
以上內容給年夜家引見了Java基本之隱式轉換vs強迫轉換,願望年夜家愛好。