Java基礎知識-基本資料型別相互轉型

林老師帶你學程式設計發表於2016-11-11

這是我第一次系統性的總結java這門語言的基礎知識用法,因本人經驗有限,所以在總結的過程中如果有錯誤或者有歧義等等之類的問題,都可以聯絡我QQ:208017534 不甚感激.

今天給大家介紹的是java中基本資料型別是如何進行相互轉換的。在介紹基本資料型別轉換之前,先給大家介紹一下什麼叫做基本資料型別:
java中資料型別分為兩種:1.基本資料型別、2.引用資料型別

基本資料型別大致可以分為4種八類
4種:整型、浮點型、字元型和布林型
八類:整型(byte、short、int、long)預設型別為int型別、浮點型(float、double) 預設型別為double型別、字元型(char)、布林型(boolean)

基本資料型別各個型別的取值範圍(其中大小指在儲存過程中需要佔的二進位制位)


引用資料型別:引用資料型別包括陣列、類和介面

這一章節先不討論什麼是陣列,類,介面,封裝等等之類的,我會在後面幾個章節中著重介紹的。
1.首先先來介紹一下byte的轉型方法,下面看程式碼:
        //byte注意事項 byte欄位在進行運算的時候發生轉型,
        // 這個時候不能再將byte運算結果直接賦值給byte欄位了,需要強制型別轉換才可以。
        byte b1=1;
        byte b2=2;
//        byte b3=b1+b2;//編譯不通過
        byte b4=(byte)(b1+b2);
        int i1=10;
//        byte b5=i1;//編譯不通過
        byte b6=20;
        int i2=b6;
        System.out.println("i2:"+i2);
2.short型別的轉換方法和byte類似,如果直接在short型別上進行相互運算就會發生編譯不通過的情形了。下面看具體例子:
       //short注意事項 short欄位在進行運算的時候發生轉型,
        // 這個時候不能再將short運算結果直接賦值給short欄位了,需要強制型別轉換才可以。
        short s1=1;
        short s2=2;
//        short s3=s1+s2;//編譯不通過
        short s4=(short)(s1+s2);
3.long型別的轉換就完全可以互相運算了,下面看具體例子:
        long l1=1;
        long l2=2;
        long l3=l1+l2;
        long l4=1+2;
4.並不是所有的型別都可以互相轉換的,有些型別差別太大轉換會編譯不通過或者執行出錯的。下面看看具體案例:
        //範圍大的轉為範圍小的可以不需要強制型別轉換就可以完成,
        //反之範圍小的轉換為範圍大,因為會發生精度損失,所以必須要強制型別轉換才可以,否則編譯不通過。
        //但是型別之間轉換也是要看欄位屬性是否相同,例如:int和double就可以進行互相轉換,可是int和String就不可以了。
        String str="str";
//        int i=(int)str;//編譯不通過

        //這裡有個特例就是Object的強制型別轉換,因為Object是一個高度抽象的型別,所以可以強制轉換為各種型別,
        //編譯都可以通過的,可是如果型別不符合,在執行的時候會發生錯誤。
        Object o="str";
        int i=(int)o;
5.數字字串又該如何轉型為相應的資料型別呢,下面看具體案例的介紹:
        //如果字串是數字型別的資料,又該怎麼進行轉換呢?
        int i=Integer.valueOf("1");
        float f=Float.valueOf("1.1");
        double d=Double.valueOf("1.23");
        //如果數字型別想轉為字串,又改如何進行轉換呢?
        String strI=String.valueOf(1);
        String strf=String.valueOf(1.0f);
        String strd=String.valueOf(1.22d);
        //還有一種更加堅簡單的方法是
        String strIi=1+"";
        String strff=1.0f+"";
        String strDd=1.23d+"";
6.型別轉換過程中精度損失具體是損失哪些?下面看具體案例介紹:
        //強制型別轉換的過程中,精度是如何進行損失的?小的資料量型別往大的轉型又是如何擴大精度的呀?
        int i = 1;
        float f1 = 1.3f;
        float f2 = 1.7f;

        double d1 = 1.4d;
        double d2 = 1.8d;
        double d3 = 2.0;

        int i1 = (int) f1;
        int i2 = (int) f2;

        int i3 = (int) d1;
        int i4 = (int) d2;
        int i5 = (int) d3;

        float ff1 = i;
        float ff2 = (float) d1;
        double dd1 = i;
        double dd2 = f1;

        System.out.println("i1:" + i1);
        System.out.println("i2:" + i2);
        System.out.println("i3:" + i3);
        System.out.println("i4:" + i4);
        System.out.println("i4:" + i4);
        System.out.println("ff1:" + ff1);
        System.out.println("ff2:" + ff2);
        System.out.println("dd1:" + dd1);
        System.out.println("dd2:" + dd2);

        //從結果可以看出在轉型的過程中如果是int型別的話,在轉化為float或者double都是變成(數值.0)的存在。
        //如果是float或者double轉換為int的時候都是浮點型前面的整數部分給int,浮點型小樹後面的精度損失掉了。
        //如果是float和double進行互相轉換的話就會發生很奇怪的事情,就是例如1.3f變成1.2999999523162842d了
        //所有最好不要再float和double型別上面直接進行互相轉換,如果想要原值轉換最好是利用字串來進行轉換。
        //例如下面將給出的這個例子:

        float f=1.23f;
        double dd11,dd22;
        String strF=f+"";
        dd11=Double.valueOf(strF);
        dd22=f;
        System.out.println("f:"+f);
        System.out.println("dd11:"+dd11);
        System.out.println("dd22:"+dd22);
7.字元和其他資料型別轉換過程是如何進行的呢?下面看看具體案例介紹:
        //型別轉換時有字元型參與運算
//        當有字元參與運算時,系統首先回去找對應的ASCII碼值,然後在參與運算   如  ‘a’ + 6 = 103
//        注意:int型別是可以賦值給char型別的   如 char  a  = (char) 97;
        char c=(char)97;
        int i='a';
        System.out.println("c:"+c);
        System.out.println("i"+i);

ASCII碼錶:


今天關於基本型別的轉換問題就介紹到這裡,因為本人經驗有限,沒辦法介紹的很完全,所以只能挑我日常經常使用的部分給大家做介紹。
如果大家對文章有什麼問題或者疑意之類的,可以加我訂閱號在上面留言,訂閱號上面我會定期更新最新部落格。如果嫌麻煩可以直接加我wechat:lzqcode


相關文章