ホームページ > Java > &#&チュートリアル > Javaの自動型変換機構の例と分析

Javaの自動型変換機構の例と分析

WBOY
リリース: 2023-04-21 11:13:16
転載
1750 人が閲覧しました

型自動変換メカニズムの分析

概要

  • 自動型変換は暗黙的な型変換とも呼ばれます

  • 式データ型は自動的にプロモートされます

すべての byte、short、char 値は int 型にプロモートされます。

オペランドの型がlongの場合、計算結果はlong型になります。

オペランドの型がfloatの場合、計算結果はfloat型になります。

オペランドが float 型の場合、オペランドは double 型であり、計算結果は double 型になります。

データ型は自動的に引き上げられるだけで、自動的に引き下げられることはありません

int 値は、long、float、および double 型の変数に割り当てることができますが、byte、short、および double 型の変数には割り当てることはできません。および 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 型に昇格されません。

  • コンパイラが整数演算であるかどうかを明確に認識している場合、または認識していない場合result が int の表現範囲に達すると、コンパイラは、元の型が byte、short、または char であっても、演算の結果を自動的に int に変換します。

自動型変換と強制型変換

型変換はいつ行われますか?

答え: 代入 | 両側のデータ型が一致しない場合操作中に、型変換が発生します。

次のように:

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 バイト)

char (2 バイト) ) -- > int (4 バイト) – > long (8 バイト) --> float (4 バイト) – > double (8 バイト)

描画分析:

コード表示:

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の自動型変換機構の例と分析

注:

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);
    }
}
ログイン後にコピー

コンパイル エラーのスクリーンショット:

float は 4 バイトですが、float は long よりも大きなデータ範囲を表します。データ範囲のサイズとバイトのサイズは必ずしも関連しているわけではないことを説明します。

コード表示:Javaの自動型変換機構の例と分析

public class TypeDemo3 {
    public static void main(String[] agrs){
        long lg = 20000000000000L;
        float f1 = lg;
        System.out.println(f1); // 1.99999997E13
    }
}
ログイン後にコピー

実行中のスクリーンショット:

# #boolean 型は型変換に参加できません

コード表示:

public class TypeDemo4 {
    public static void main(String[] agrs) {
        boolean flag = 12;
        int flag1 = flag;
        System.out.println(flag1);
    }
}
ログイン後にコピー
Javaの自動型変換機構の例と分析コンパイル エラーのスクリーンショット:

強制型変換 (明示的な型変換) )

ルール: 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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート