在定義變量時,有許多要注意的問題,1不謹慎就會出現損失精度或不兼容類型等問題。
例如:
1.定義長整型數據時,必須加后綴l或L
long l =123456789012345L
2.定義單精度類型時(7⑻位有效數字),必須加后綴 f 或 F
float f = 12.5F
3. boolean類型不可以轉換為其它的數據類型。
這其中,我們常常會遇到數據類型的轉換問題,最為常見的要屬隱式轉換和強迫轉換了,我們來分析1下。
隱式轉換
特點:
從小到大,可以隱式轉換,數據類型將自動提升。
byte,short,char -->int -->long -->float -->double
注意:long是8個字節,float是4個字節。
long是整數,float是浮點型,整數和浮點數的存儲規則不1樣,記住1點long的范圍是小于float的。
例 :
byte a=10;
int b=a;
當編譯intb=a 時, a隱式轉換為int類型。
強迫轉換
特點:
從大到?。ㄈ绻忝鞔_知道數據是可以用該數據類型來表示的,可以用強迫轉換)
格式:(轉換后的數據類型)變量或值。
注:1般情況下,根本不推薦使用強迫類型轉換。
例1 :
int a=10;
byte b=(byte)a;
當編譯 byte b=(byte)a 時, a被強迫轉換為byte類型。
例2:
解析:
數據130默許的是int類型的10進制數據,
第1步:10進制130轉換成2進制數據。
10000010
第2步:130在內存中的表示情勢以下
原碼:0000000000000000 00000000 10000010
第3步:求int130的補碼
由于130是正數,所以,反碼和補碼都和原碼1致。
補碼:0000000000000000 00000000 10000010
第4步:對補碼進行截取,只剩下最后8位。
(byte)130 的補碼為:10000010
第5步:把該補碼轉化為原碼。
由于符號位(第1位)是1,故該數為負數,
反碼:10000001 (補碼⑴)
原碼:11111110 (符號位不變,數據位取反)
轉化為10進制為 ⑴26 ,所以終究打印⑴26。
例3 :
shorts = 1;
s= s +1;
和
shorts = 1;
s+=1;
有問題嗎?為何呢?
解析:
第1程序會報錯:毛?。翰患嫒莸念愋停簭膇nt轉換到short可能會有損失
緣由:s=s+1;s+1會隱式轉換為int類型,當把1個int類型賦值給short類型是,可能會損失。
第2個程序可以編譯運行。
緣由:s+=1,雖然可以看作s=s+1,但是還是有區分的,s+=1中有1個強迫轉換,即s=(short)(s+1), 會把s+1的值強迫轉換為short類型,故不會報錯。
小結:
數據類型轉換的問題如果產生在 1些小程序上,我們 也許能夠1眼看出,可是當編寫1個龐大的系統時,具有龐大數據量時,這些小小的問題可能致使系統出錯乃至崩潰,所之前期代碼編寫的嚴謹性就得靠我們自己掌控了。
上一篇 大數冪取模