型別轉換
由於 Java 是強型別語言,所以要進行有些運算的時候,需要用到型別轉換。
型別的優先順序
低----------------------------------------------------------->高
byte,short,char->int->long->float->double
運算中,不同型別的資料先轉化為同一型別,然後進行運算。
//記憶體溢位
int i1= 128;
byte i2=(byte)i1; //記憶體溢位——byte型別取值範圍是 -128 到 127,超出範圍
//強制轉換 (型別)變數名!!!!! 高--->低
//自動轉換 低--->高
System.out.println(i1); //i1=128
System.out.println(i2); //i2=-128
System.out.println("====================================");
int i3=10;
double i4=i3;
System.out.println(i3);
System.out.println(i4);
System.out.println("====================================");
//轉換時,浮點數的精度問題
System.out.println((int)23.7); //23
System.out.println((int)-45.89f); //-45
/*
型別轉換的注意事項
1.不能對布林值轉換
2.不能把資料型別轉換為不相干的型別
3.優先順序高轉換為低的時候,強制轉換
4.在轉換過程中,可能存在精度問題或者資料溢位問題
*/
System.out.println("====================================");
char i5='a';
int i6=i5+1;
System.out.println((int)i5); //97
System.out.println(i6); //98
System.out.println((char) i6); //b
型別轉換的注意事項
1.不能對布林值轉換
2.不能把資料型別轉換為不相干的型別
3.優先順序高轉換為低的時候,強制轉換
4.在轉換過程中,可能存在精度問題或者資料溢位問題
強制型別轉換
自動型別轉換。
較大的數字計算
//在打出較大數字時,可以用下劃線分隔開,下劃線不會輸出
int i1=10_0000_0000; //十億 每四位數有一個下劃線分隔開
System.out.println(i1);
System.out.println("========================================");
//計算問題:每年賺10億,20年一共賺多少?
int money=10_0000_0000;
int years=20;
int total=money*years;
System.out.println(total);//-1474836480
long total2=money*years; //轉換為範圍更大的long。
// 但money*years計算結果已經預設是int型別了,然後再轉換為long型別,就有問題了
System.out.println(total2);//-1474836480
long total3=money*(long)years;
System.out.println(total3); //200_0000_0000---------正確計算,先把一個數轉換為long型別
//在 Java 中,當一個 `long` 型別與一個 `int` 型別相乘時,結果為 `long` 型別。
//這是因為在 Java 的運算中,如果參與運算的資料型別不同,會自動進行型別提升,以確保計算的準確性和避免資料丟失。
// 由於 `long` 型別的取值範圍大於 `int` 型別,所以計算結果會被提升為 `long` 型別。
注意點:
-
在打出較大數字時,可以用下劃線分隔開,下劃線不會輸出。每四位數有一個下劃線分隔開。如:10_0000_0000
-
long型別與int型別相乘,結果是long型別。
因為在 Java 的運算中,如果參與運算的資料型別不同,會自動進行型別提升,以確保計算的準確性和避免資料丟失。由於
long
型別的取值範圍大於int
型別,所以計算結果會被提升為long
型別表述範圍小的可以自動轉換為表述範圍大的
在 Java 中,不同型別的數字進行加減乘除運算時,結果的型別遵循以下規則: **一、加法(+)** 1. 如果兩個運算元中有一個是 `long` 型別,那麼結果為 `long` 型別。 - 例如:`int a = 10; long b = 20; long result = a + b;`,結果 `result` 是 `long` 型別。 2. 如果兩個運算元中有一個是 `double` 型別,那麼結果為 `double` 型別。 - 例如:`int a = 10; double b = 20.5; double result = a + b;`,結果 `result` 是 `double` 型別。 3. 否則,如果兩個運算元都是 `int`、`short`、`byte`、`char` 型別,結果為 `int` 型別。 - 例如:`short a = 10; short b = 20; int result = a + b;`,結果 `result` 是 `int` 型別。 **二、減法(-)** 與加法類似: 1. 如果兩個運算元中有一個是 `long` 型別,那麼結果為 `long` 型別。 2. 如果兩個運算元中有一個是 `double` 型別,那麼結果為 `double` 型別。 3. 否則,如果兩個運算元都是 `int`、`short`、`byte`、`char` 型別,結果為 `int` 型別。 **三、乘法(*)** 1. 如果兩個運算元中有一個是 `long` 型別,那麼結果為 `long` 型別。 2. 如果兩個運算元中有一個是 `double` 型別,那麼結果為 `double` 型別。 3. 否則,如果兩個運算元都是 `int`、`short`、`byte`、`char` 型別,結果為 `int` 型別。 **四、除法(/)** 1. 如果兩個運算元中有一個是 `double` 型別,那麼結果為 `double` 型別。 - 例如:`int a = 10; double b = 20.5; double result = a / b;`,結果 `result` 是 `double` 型別。 2. 如果兩個運算元都是 `int`、`long`、`short`、`byte`、`char` 型別: - 對於整數除法,結果為整數型別,即如果兩個運算元都是 `int`,結果為 `int`;如果兩個運算元中有一個是 `long`,結果為 `long`。 - 例如:`int a = 10; int b = 3; int result = a / b;`,結果 `result` 是 `int` 型別,值為 3。`long c = 10L; long d = 3L; long result2 = c / d;`,結果 `result2` 是 `long` 型別。 需要注意的是,整數除法可能會導致精度丟失,因為它會截斷小數部分。如果需要精確的除法結果,可以將運算元之一轉換為 `double` 型別進行計算。 表述範圍小的可以自動轉換為表述範圍大的
自我測評
1.將int型別的128轉換為byte型別
2.將char型別的‘a’轉換為int型別
3.計算10億乘20的準確結果