在實際開發中,我們會經常遇到資料型別轉換。資料型別轉換,顧名思義就是將乙個資料型別轉換成另乙個資料型別,這種轉換方式可以分為兩種,自動型別轉換和強制型別轉換。
容量小的資料型別可以自動轉換成容量大的資料型別,這裡的容量指的是這個資料型別的取值範圍。可以用下圖表示除boolean之外七個基本資料型別的轉換關係:
圖中黑色箭頭表示無資料丟失的自動型別轉換,而紅色箭頭表示在轉換時可能存在資料丟失。
byte、short、char在運算時也會轉換成int,返回的結果也是int。我們也可以直接將整型常量直接賦值給byte、short、char等型別變數,而不需要進行強制型別轉換,只要不超過其取值範圍。
自動型別轉換中很容易出現乙個值溢位的問題,如下**:
int money=100000000;
int years=20;
long total=money*years;
//返回的是負數,因為money和years都是int型別,相乘也為int,但其值超過了int的表數範圍,所以溢位。
//錯誤修改*完已經溢位了
long total=(long)(money*years);
//正確修改
long total=(long)money*years;
//算乙個人70年心跳多少次
long times=70*60*24*356*70;//溢位
//一般我們優先對第乙個數進行型別轉換(可能前面就已經溢位)
long times=70l*60*24*365*70;
可以很簡單的看出,我們在處理值溢位的問題時,都是先進行型別轉換再進行運算,避免在運算的時候先溢位,導致轉換後的資料是錯誤的。
強制型別轉換時顯示的轉換乙個數值的型別,強制轉換的格式如下:
short s1 = 1;
int s2 = s1 + 2;//自動型別轉換
short s3=(short) s2;//強制型別轉換
但是在強制轉換過程中有乙個需要關注的問題,就是當一種型別強制轉換成另一種型別而又超出目標型別的取值範圍時,就會造成資料轉換的損失,這以為著這個資料轉換過程是毫無意義的。
在混合多種資料型別的表示式中,型別會向容量大的值的資料型別提公升。
int a = 5;
double b = a/2.0;
這是乙個很簡單的運算,但是在這個運算過程就能體現我們所說的型別提公升問題。浮點數的預設型別是double,在a/2.0的運算過程中,a會由int自動轉換成double型別,以便能與2.0進行同型別的運算。也就是說,在運算過程中,int型別提公升為容量更大的double型別。 JAVA基礎 資料型別轉換
在進行程式設計的時候,常常會遇到資料型別轉換的問題,現在就進行相應的總結。八種基本資料型別 除了boolean型別以外所有的基本資料型別在進行不同資料型別的運算的時候都要進行型別轉換。一 自動型別轉換 只要型別轉換滿足相容型別,且為從低級別轉向高階別 從小向大 轉換,就可以進行自動型別轉換。注意 c...
JAVA基礎(五) 資料型別轉換
自動型別轉換指的是表示範圍小的資料型別可以自動轉換為表示範圍大的資料型別。數值型的表示範圍從小到大依次為 byte short int long float double,但必須注意,int float,long float,long double的自動型別轉換,可能會損失精度。此外char型別可以...
Java資料型別轉換
1字串to整型 string num 111 int integer.parseint num 確保num 只有數字字元 1.1byte and string publicclasstestmain publicstaticbytestring2byte string input byte2stri...