- /*
- 關於基本數據類型轉換規則:
- 1. 8種基本數據類型除boolean類型以外均可以相互轉換.
- 2. 小容量向大容量轉換叫作自動類型轉換:
- byte<short<int<long<float<double
- char<
- 3. byte,short,char作混合運算的時候,各自都先轉換成int在作運算
- 4.大容量向小容量轉換是強制類型轉換,須要增強制轉換符,
- 編譯雖然經過,運行期可能損失精度。謹慎使用。
- 5.若是整數沒有超出byte,short,char的取值範圍,能夠直接將這個整數賦值給byte,short,char
- 6.多種數據類型作混合運算,先轉換成容量最大的那種再作運算。
- */
- public class DataTypeTest06 {
- public static void main(String[] args) {
- //出現錯誤,1000超出了byte的範圍
- //byte a = 1000;
- //正確,由於20沒有超出byte範圍
- //因此賦值
- byte a = 20;
- //變量不能重名
- //short a = 1000;
- //正確,由於數值1000沒有超出short類型的範圍
- //因此賦值正確
- short b = 1000;
- //正確,由於默認就是int,而且沒有超出int範圍
- int c = 1000;
- //正確,能夠自動轉換
- long d = c;
- //錯誤,出現精度丟失問題,大類型-->>小類型會出現問題
- //int e = d;
- //將long強制轉換成int類型
- //由於值1000,沒有超出int範圍,因此轉換是正確的
- int e = (int)d;
- //由於java中的運算會會轉成最大類型
- //而10和3默認爲int,因此運算後的最大類型也是int
- //因此是正確的
- int f = 10/3;
- //聲明10爲long類型
- long g = 10;
- //出現錯誤,多個數值在運算過程當中,會轉換成容量最大的類型
- //如下示例最大的類型爲double,而h爲int,因此就會出現大類型(long)到小類型(int)
- //的轉換,將會出現精度丟失問題
- //int h = g/3;
- //能夠強制轉換,由於運算結果沒有超出int範圍
- //int h = (int)g/3;
- //能夠採用long類型來接收運算結果
- //long h = g/3;
- //出現精度損失問題,如下問題主要是優先級的問題
- //將g轉換成int,而後又將int類型的g轉換成byte,最後byte類型的g和3運算,那麼
- //它的運算結果類型就是int,因此int賦值給byte就出現了精度損失問題
- //byte h = (byte)(int)g/3;
- //正確
- //byte h = (byte)(int)(g/3);
- //不能轉換,還有由於優先級的問題
- //byte h = (byte)g/3;
- //能夠轉換,由於運算結果沒有超出byte範圍
- //byte h = (byte)(g/3);
- //能夠轉換,由於運算結果沒有超出short範圍
- short h = (short)(g/3);
- short i = 10;
- byte j = 5;
- //錯誤,short和byte運算,首先會轉換成int再運算
- //因此運算結果爲int,int賦值給short就會出現精度丟失問題
- //short k = i + j;
- //能夠將運算結果強制轉換成short
- //short k = (short)(i + j);
- //由於運算結果爲int,因此能夠採用int類型接收
- int k = i + j;
- char l = 'a';
- System.out.println(l);
- //輸出結果爲97,也就是a的ascii值
- System.out.println((byte)l);
- int m = l + 100;
- //輸出結構爲197,取得a的ascii碼值,讓後與100進行相加運算
- System.out.println(m);
- }
- }