首頁 >Java >java教程 >Java中類型自動轉換機制的範例與分析

Java中類型自動轉換機制的範例與分析

WBOY
WBOY轉載
2023-04-21 11:13:161713瀏覽

類型自動轉換機制解析

概述

  • 自動類型轉換也叫隱式類型轉換

  • 表達式的資料型別會自動提升

所有的byte型、short型別和char的值將會被提升到int型。

如果一個運算元是long型,計算結果就是long型;

如果一個運算元是float型,計算結果就是float型;

如果一個運算元是double型,計算結果就是double型。

資料型別只會自動提升,無法自動降低

int值可以賦值給long、float、double型變量,不能賦值給byte、short、char型變數

Java中類型自動轉換機制的範例與分析

#對於函數的傳參也是一樣

Java中類型自動轉換機制的範例與分析

#當然,在有函數重載的情況下,java編譯器會自動選擇最匹配的函數進行呼叫

Java中類型自動轉換機制的範例與分析

Java中整數預設的資料型別是int型別

所有長度都低於int的型別(byte、short、char)在運算之後結果將會被提升為int型

Java中類型自動轉換機制的範例與分析

當然還有以下的這種情況,這種情況是因為我們在進行賦值運算的時候,java編譯器可以明確知道運算的結果是否超過byte或short的取值範圍,所以byte a = 1 1; 並沒有報錯。而上面 byte c = a b; 編譯出錯的原因是因為a和b都是一個變量,相加的結果是否會超過byte的取值範圍編譯器並不知道,所以編譯器將結果提升為int型了。

Java中類型自動轉換機制的範例與分析

小結一下:

  • #當編譯器明確知道整數的運算結果沒有到達int的表示範圍時,byte、short或char類型的運算結果不會被自動提升為int型別

  • 當編譯器明確知道或不清楚整數的運算結果是否到達int的表示範圍時,編譯器將會自動將運算的結果轉換成int,即使原來是byte、short或char型別。

自動型別轉換& 強制型別轉換

什麼時候會發生型別轉換

答案: 賦值| 運算時,兩邊資料型別不一致時就會發生類型轉換

如下:

public class TypeTest {
    public static void main(String[] args){
       	// 运算时发生的隐式类型转换,两整数相除得到的还是一个整数
        byte a  = 3;
        byte b = 4;
        int num  =  a + b;
        System.out.println(num); // 7
        // 赋值时发生的隐式类型转换
        int ch = '0';
        System.out.println(ch); // 48
        // 运算时发生的强制类型转换
        byte a1 = 12;
        byte a2 = 12;
        byte num1 = (byte)(a1  + a2);
        System.out.println(num1); // 24
        // 赋值时发生的强制类型转换
        short b3 = 1234;
        byte a3 = (byte) b3;
        System.out.println(a3); // -46
    }
}

運行截圖:

Java中類型自動轉換機制的範例與分析

#類型轉換分類

  • 自動型別轉換

  • 強制型別轉換

#自動型別轉換(隱含型別轉換)

#規則:從小到大,低位元組自動提升到高位元組

##byte(1位元組) – > short( 2位元組)-- > int(4位元組) – > long(8位元組) --> float(4位元組) – > double(8位元組)#> float(4位元組) – > double(8位元組)

char (2位元組)-- > int(4位元組) – > long(8位元組) --> float(4位元組) – > double(8位元組)

畫圖分析:

Java中類型自動轉換機制的範例與分析

程式碼展示:

public class TypeDemo {
    public static void main(String[] agrs){
        // byte -- > short
        byte b1 = 127;
        short s1 = b1;
        System.out.println(s1); // 127
        // short -- > int 
        short  s2 = 30000;
        int i = s2;
        System.out.println(i); // 30000
        // int  -- > long
        int num = 2100000000;
        long lg = num;
        System.out.println(num); // 2100000000
        // long -- > float 
        long lg1 = 200000000000000L;
 	    float f1 = lg1;
        System.out.println(f1);// 2.00000001E14
        // float -- > double 
        float f2 = 3.14f;
        double d1 = f2;
 	    System.out.println(d1); // 3.140000104904175
        // char -- > int
	    char ch = 'a';
        int i1 = ch ;
        System.out.println(i1); // 97
        // char -- > long
        char ch2 = 'b';
        long lg2 = ch2;
        System.out.println(lg2); // 98
        // char  -- >  double
        char ch3 = 'c';
        double dou = ch3;
        System.out.println(dou); // 99.0
        // char -- > float
        char ch4 = 'd';
        float  f3 = ch4;
        System.out.println(f3); // 100.0
    }
}

執行截圖:

Java中類型自動轉換機制的範例與分析

注意:

byte、short不能和char進行相互轉換

程式碼展示:

public class TypeDemo2 {
    public static void main(String[] agrs){
 	    // byte -- > char
        byte bt = 127;
        char ch = bt;
        System.out.println(ch);
        // short -- > char
        short sh = 12;
        char ch2 = sh;
        System.out.println(ch2);
    }
}

編譯錯誤截圖:

Java中類型自動轉換機制的範例與分析

float雖然是4個位元組,但是float比long表示的資料範圍更大。說明資料範圍的大小和位元組的大小不一定相關

程式碼展示:

public class TypeDemo3 {
    public static void main(String[] agrs){
        long lg = 20000000000000L;
        float f1 = lg;
        System.out.println(f1); // 1.99999997E13
    }
}

運行截圖:

Java中類型自動轉換機制的範例與分析

boolean類型不能參與型別轉換

程式碼展示:

public class TypeDemo4 {
    public static void main(String[] agrs) {
        boolean flag = 12;
        int flag1 = flag;
        System.out.println(flag1);
    }
}

編譯錯誤截圖:

Java中類型自動轉換機制的範例與分析

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

規則:從大到小,高位元組手動強制轉換到低位元組

#########

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > short (2字节)-- > byte(1字节)

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > char(2字节)

画图分析:

Java中類型自動轉換機制的範例與分析

(掌握)格式:目标数据类型 变量名 = (目标数据类型) 变量 | 常量;

代码展示:

public class TypeDemo5 {
    public static void main(String[] agrs){
        // float -- > long
        // final float  PI = 3.14f;
        // long num = (long) PI; // 3
        // float little =  3.14f;
        // long num = (long)little; // 3
 	    long num = (long)3.14f;      
        System.out.println(num);// 3 
        // double -- > float 
        // double dou = 3.14;
        // float little1 = (float)dou; // 3.14
        //  float little1 = (float) 3.14d;  // 3.14
        final double  dou = 3.14;
        float little1 = (float)dou;
        System.out.println(little1); // 3.14
        // long -- > int 
        // long  num1 = 2000000000000L;
        // int   num2 = (int)num1;  // -1454759936
        // int num2 = (int)2000000000000L; // -1454759936
       	final  long num1 = 2000000000000L;
        int num2 = (int)num1;
        System.out.println(num2);  // -1454759936
        // int --> short
        // int  num3  = 12;
        // short num4 = (short)num3; // 12
        // short num4 = (short)40000; // -25536
        final int num3 = 60;
        short num4 = (short)num3;
        System.out.println(num4); // 60
        // short -- > byte
        final short sh = 12345;
        byte bt = (byte)sh;
        System.out.println(bt); // 57
        short sh2 = 78;
	    bt = (byte) sh2;
        System.out.println(bt); // 78
    }
}

运行截图:

Java中類型自動轉換機制的範例與分析

注意:

强制类型转换有数据丢失,一般不建议使用

代码展示:

public  class TypeDemo6 {
   public static void main(String[] agrs) {
       short a = 1245;
       byte b = (byte)a;
       System.out.println(b);
   } 
}

运行截图:

Java中類型自動轉換機制的範例與分析

以上是Java中類型自動轉換機制的範例與分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除