一、自動型別轉換
1.在java中,變數參與運算的時候會自動提升資料型別
byte,short,char -> int -> long -> float -> double
二、強制型別轉換
1.語句格式:
目標資料型別 變數名=(目標資料型別)要轉型的變數值或者表示式
public class DataTypeDemo2 {
public static void main(String[] args) {
//哪句是編譯失敗的呢?為什麼呢?
// byte b1=3,b2=4,b; //不推薦這麼定義
//工作的時候,推薦一個變數定義佔用一行
byte b1=3;
byte b2=4;
byte b;
// b=b1+b2; // 如果是變數參與運算,會先自動型別轉換,做完運算後,再判斷是否可以進行賦值
//強制型別轉換
b=(byte)(b1+b2);
System.out.println(b);
// b=3+4; // 如果是常量參與運算,會先進行運算,運算後,會判斷結果是否在範圍內,如果在直接賦值
}
}
2.注意事項:
使用可能會有風險,精度丟失
public class DataTypeDemo3 {
public static void main(String[] args) {
byte b = (byte)130; // 無法直接賦值,原因是130超過了byte的最大範圍,需要強制型別轉換
System.out.println(b); // -126
}
}
/*
計算機中的資料都是採用補碼進行運算的
130的補碼:00000000 00000000 00000000 10000010
做強制型別轉換:
補碼: (00000000 00000000 00000000) 10000010
補碼: 10000010
已知補碼求原碼:
符號位 數值位
補碼: 1 0000010
反碼: 1 0000001
原碼: 1 1111110
-----------------------------
64 + 32 + 16 + 8 + 4 + 2 = 126
因為符號位是1,所以最終的結果是-126
*/