認識自動型別轉換

2020-08-08 21:50:05

以下內容參考菜鳥教學,記錄自己的學習。

數據型別轉換

整型、實型(常數)、字元型數據可以混合運算。運算中,不同類型的數據先轉化爲同一型別,然後進行運算。

自動轉換按從低階到高階順序:

------------------------------------>byte,short,char> int> long> float> double 

在这里插入图片描述
數據型別轉換必須滿足如下規則:

  • 不能對boolean型別進行型別轉換。
  • 不能把物件型別轉換成不相關類的物件。
  • 在把容量大的型別轉換爲容量小的型別時必須使用強制型別轉換。
  • 轉換過程中可能導致溢位或損失精度。
int i =128;   
byte b = (byte)i; //b=-128
//因爲byte型別時8位元,範圍【-128,127】,所以當int強制轉換爲byte型別時,128會溢位
  • 浮點數到整數的轉換是通過捨棄小數得到,而不是四捨五入。
int a = (int)23.5;  //a的值爲23         
int b = (int)-23.5; //b的值爲-23

自動型別轉換(隱式型別轉換)

必須滿足轉換前的數據型別的位數要低於轉換後的數據型別(通俗說就是:小的型別自動轉化爲大的型別)


public class ZiDongLeiZhuan{
        public static void main(String[] args){
            char c1='a';//定義一個char型別
            int i1 = c1;//char自動型別轉換爲int
            System.out.println("char自動型別轉換爲int後的值等於"+i1);  //結果 97
            char c2 = 'A';//定義一個char型別
            int i2 = c2+1;//char 型別和 int 型別計算,char型別c2自動轉換爲int型   
            System.out.println("char型別和int計算後的值等於"+i2);   //66
        }
}

強制型別轉換(顯式型別轉換)

  • 條件是轉換的數據型別必須是相容的
  • 格式:(type)value type是要強制型別轉換後的數據型別 範例
  • 強制型別轉換可能導致溢位或損失精度

public class QiangZhiZhuanHuan{
    public static void main(String[] args){
        int i1 = 123;
        int i2 = 128;
        byte b = (byte)i1;//強制型別轉換爲byte
        System.out.println("int強制型別轉換爲byte後的值等於"+b);
         byte c = (byte)i2;  //c的值爲-128,溢位。
         int d = (int)12.55;  //d的值爲12,損失精度
    }
}

隱含強制型別轉換

  • 整數的預設型別是 int,小數型別預設的double

在这里插入图片描述

注意

在这里插入图片描述
這裏居然可以直接將int型10,20(整數的預設型別是 int)賦值給byte型別的變數,這是我看到這段程式碼的想法,後面去看了一些資料,真的是