全國政協委員於欣偉建議 強制人臉識別登入網遊
阿新 • • 發佈:2022-03-02
自動型別轉換
- 程式執行時,不通型別的資料需要先轉換為同一型別,然後再進行運算。
- 自動型別轉換的規則是由低到高自動轉換,byte>short>int>long>float>double,浮點數型別的優先順序最高。
- boolean不參與型別轉化
強制型別轉換
-
強制型別轉換可以實現高記憶體的資料型別轉化為低記憶體的資料型別
-
用法:(資料型別)變數名
-
強制轉化需要注意資料型別的容量,防止記憶體溢位的情況。
int a = 300; //byte b = a;報錯,未執行強制轉化,賦值給變數b的資料超出了byte的表數範圍 byte b =(byte)a; //程式執行成功,但會出現記憶體溢位的問題,因為變數a的值超過了byte的表數範圍,它輸出的結果是一個完全不相干的值
- 不能把物件型別轉換為不相干的型別
- 在把浮點數型別強制轉換為整數型別的時候會存在精度問題,
double a = 3.464;
system.out.println((int)a);
//這裡轉換的結果會取整數部分捨棄小數
其他問題
int money = 100000000; int years = 20; int total_1 = money*years; long total_2 = money*years; long total_3 = (long)money*years; System.out.println(total_1); System.out.println(total_2);
如上程式碼:total輸出後的結果是個錯誤的值,因為:
- total_1,計算出的結果超出了int可以表示的範圍,
- total_2,因為兩個運算元都是int型別,所以輸出的結果預設是int型別,首先計算money*years的值然後把錯誤的值轉換為long型別,在轉換為Long型別之前就已經出現精度問題了。
- 正確的表示式為total_3,首先把變數money的值轉換為Long型別,然後進行計算並把值賦給變數total_3,隨後成功輸出200億