自動型変換は暗黙的な型変換とも呼ばれます
式データ型は自動的にプロモートされます
すべての byte、short、char 値は int 型にプロモートされます。
オペランドの型がlongの場合、計算結果はlong型になります。
オペランドの型がfloatの場合、計算結果はfloat型になります。
オペランドが float 型の場合、オペランドは double 型であり、計算結果は double 型になります。
int 値は、long、float、および double 型の変数に割り当てることができますが、byte、short、および double 型の変数には割り当てることはできません。および char 型変数
関数パラメータの受け渡しについても同様です
##関数の場合はもちろん、オーバーロードすると、Java コンパイラは自動的に最も多くのものを選択します。一致する関数は Java の整数のデフォルトのデータ型は int 型です。すべての型int (byte, short, char) よりも小さい長さの場合、演算後の結果は int 型にプロモートされます もちろん、次のような状況もあります。これは、代入演算を実行するときに、Java コンパイラーが演算の結果が byte の値の範囲を超えるか short であるかを明確に認識できるため、byte a = 1 1; はエラーを報告しません。上記の byte c = a b; がコンパイル エラーになる理由は、a と b が両方とも変数であり、加算の結果が byte の値の範囲を超えるかどうかがコンパイラにはわからないため、コンパイラは結果を 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 } }
##型変換分類
#自動型変換#強制型変換
シーケンス:
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 } }
実行中のスクリーンショット:
注: 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 よりも大きなデータ範囲を表します。データ範囲のサイズとバイトのサイズは必ずしも関連しているわけではないことを説明します。
コード表示:
public class TypeDemo3 { public static void main(String[] agrs){ long lg = 20000000000000L; float f1 = lg; System.out.println(f1); // 1.99999997E13 } }
public class TypeDemo4 { public static void main(String[] agrs) { boolean flag = 12; int flag1 = flag; System.out.println(flag1); } }
ルール: 大きいバイトから小さいバイト、上位バイトから下位バイトへ手動でキャスト
シーケンス:double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > short (2字节)-- > byte(1字节) double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > char(2字节) 画图分析: (掌握)格式:目标数据类型 变量名 = (目标数据类型) 变量 | 常量; 代码展示: 运行截图: 注意: 强制类型转换有数据丢失,一般不建议使用 代码展示: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
}
}
public class TypeDemo6 {
public static void main(String[] agrs) {
short a = 1245;
byte b = (byte)a;
System.out.println(b);
}
}
运行截图:
以上がJavaの自動型変換機構の例と分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。