Rumah >Java >javaTutorial >Contoh dan analisis mekanisme penukaran jenis automatik dalam Java
Penukaran jenis automatik juga dipanggil penukaran jenis tersirat
Ungkapan Jenis data dipromosikan secara automatik
Semua nilai bait, pendek dan aksara akan dinaikkan pangkat kepada jenis int.
Jika operan adalah jenis panjang, hasil yang dikira adalah jenis panjang; Jika operan adalah jenis apungan Ia adalah jenis berganda, dan hasil pengiraan adalah jenis berganda.
Jenis data hanya akan meningkat secara automatik, bukan menurun secara automatik
nilai int boleh diberikan kepada pembolehubah jenis panjang, terapung, berganda, tetapi tidak boleh ditetapkan kepada pembolehubah jenis bait, pendek, char
Jenis data lalai integer dalam Java ialah jenis intSemua jenis dengan panjang lebih rendah daripada int (bait, pendek, char) Selepas operasi, hasilnya akan dinaikkan kepada jenis int
Sudah tentu ada situasi berikut kerana apabila kita melakukan operasi penugasan, pengkompil java Pemproses boleh mengetahui dengan jelas sama ada hasil operasi melebihi julat nilai bait atau pendek, jadi bait a = 1 + 1 tidak melaporkan ralat. Sebab ralat kompilasi dalam bait di atas c = a + b ialah a dan b adalah kedua-dua pembolehubah Pengkompil tidak tahu sama ada hasil yang ditambah akan melebihi julat nilai bait, jadi pengkompil mempromosikan hasil kepada int. menaip.
Untuk meringkaskan:Apabila pengkompil dengan jelas mengetahui bahawa hasil operasi integer tidak mencapai perwakilan julat int, hasil operasi jenis bait, pendek atau char tidak akan dinaikkan secara automatik kepada jenis int
Apabila pengkompil dengan jelas mengetahui atau tidak mengetahui sama ada hasil operasi integer mencapai julat perwakilan int , pengkompil secara automatik akan menukar hasil operasi kepada int, walaupun ia pada asalnya jenis bait, pendek atau char.Penukaran jenis automatik & penukaran jenis wajibBilakah penukaran jenis berlaku?
seperti berikut:
Penukaran jenis automatik
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 } }Penukaran jenis paksa
Penukaran jenis automatik (penukaran jenis tersirat)
Peraturan:bait (1 bait) – > pendek(2 bait)-- > int(4 bait) – (2 bait) -- > int (4 bait) – analisis:
Paparan kod:
Tangkapan skrin sedang dijalankan:
Nota:
bait, pendek dan aksara tidak boleh ditukar antara satu sama lain Paparan kod:
Tangkapan skrin Ralat Kompilasi:
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 } }
Walaupun apungan ialah 4 bait, apungan mewakili julat data yang lebih besar daripada yang panjang. Ambil perhatian bahawa saiz julat data tidak semestinya berkaitan dengan saiz bait
Paparan kod:
Tangkapan skrin yang sedang dijalankan:
Jenis boolean tidak boleh mengambil bahagian dalam penukaran jenis Paparan kod:
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); } }Tangkapan skrin ralat kompilasi: Penukaran jenis paksa (penukaran jenis eksplisit )
public class TypeDemo3 { public static void main(String[] agrs){ long lg = 20000000000000L; float f1 = lg; System.out.println(f1); // 1.99999997E13 } }Peraturan:
Hantar manual dari besar ke kecil, bait tinggi ke bait rendah
Pesanan:
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); } }
运行截图:
Atas ialah kandungan terperinci Contoh dan analisis mekanisme penukaran jenis automatik dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!