java中的型別轉換
型別轉換
概述:不同型別的資料之間可能會進行運算,而這些資料取值範圍不同,儲存方式不同,直接進行運算可能會造成資料損失,所以需要將一種型別轉成另一種型別再進行運算。
分類:1.自動(隱式)型別轉換
小型別轉大型別,自動替身為大型別,運算結果是大型別
資料型別的範圍從小到大如下:
byte,short,char--->int(預設的整型)--->long--->float--->double(預設的浮點型)
boolean型別不參與比較,它的值只有true和false兩個
2.強制(顯示)型別轉換
手動將大型別轉換成小型別,運算結果是小型別
格式:目標型別 變數名=(目標型別)要轉換的值
注意:強制型別轉換再使用的時候可能會出現精度丟失的問題
型別關係圖:
注意事項:當且僅當大型別資料可以轉換為小型別資料時,才進行轉換,否則會造成精度損失(例:當浮點數(小數)轉換為整數,
浮點數小數點後面的值會丟失)
例:
如果定義兩個變數,一個為int型,一個為byte型,他們運算的結果是一個int型,所以可以定義一個int變數來進行接收他們的計算的結果
public class d { public static void main(String[] args) {//定義的格式:資料型別 變數名=初始值 //定義一個int型別的資料和一個byte型別的資料 int bb=4; byte aa=5; int cc=aa+bb; System.out.println(cc); } }
運算結果為:
9
但是如果使用byte來接收呢,程式就會報錯,這個錯誤主要是因為當不管是什麼short,byte,還是char型別計算的時候都會轉換成int型別來進行計算,所以在int型別和byte型別計算的時候,會先將byte型別轉換為int型別,結果也是int型別。這個時候如果還是要求資料型別
為byte型別呢?這個時候就需要用到強制型別轉換了,將aa和bb執行的結果強制轉換為byte就可以了。
public class d { public static void main(String[] args) { //定義的格式:資料型別 變數名=初始值 //定義一個int型別的資料和一個byte型別的資料 int bb=4; byte aa=5; byte cc=(byte)(aa+bb); //aa和bb的結果為int型別,強制轉換為byte型別 System.out.println(cc); } }
執行結果為:
9
但是強制型別轉換是不能隨隨便便就執行的,有時候會造成精度丟失的情況,比如將一個浮點數型別的資料強制轉換為一個int型別的資料:
public class d { public static void main(String[] args) { //定義的格式:資料型別 變數名=初始值 double dd=5.4; int qq=(int)dd; //強制轉換為整型 System.out.println(qq); } }
執行結果為:
5