java自动类型转换例子,java类型转换的原理
00-1010自动类型转换机制分析概述数据类型只会自动提升,不会自动降低。Java中默认的数据类型是int类型自动类型转换强制类型转换什么时候会发生类型转换分类自动类型转换(隐式类型转换)强制类型转换(显式类型转换)
目录
00-1010自动类型转换也叫隐式类型转换表达式的自动数据类型提升。byte、short和char的所有值都将提升为int。
如果一个操作数是长的,结果也是长的;
如果操作数是浮点类型,则计算结果是浮点类型;
如果一个操作数是double,结果也是double。
类型自动转换机制解析
int值可以分配给long、float和double变量,但不能分配给byte、short和char变量。
函数的参数也是如此。
当然,当出现函数过载时,java编译器会自动选择最匹配的函数来调用。
00-1010所有长度小于int的类型(byte,short,char)运算后都会提升为int。
当然还有下面这种情况。这种情况是因为我们在进行赋值运算时,java编译器可以清楚地知道运算的结果是超出了byte还是short的取值范围,所以byte a=1 1未报告任何错误。并且字节c=a b以上;编译错误的原因是A和B都是变量,编译器不知道相加的结果会不会超过byte的取值范围,所以编译器把结果提升为int类型。
小结一下:
当编译器明确知道整数的运算结果没有达到int的表示范围时,byte、short或char类型的运算结果不会自动提升为int类型。当编译器明确知道或不知道整数的运算结果是否达到int的表示范围时,编译器会自动将运算结果转换为int,即使是byte、short或char类型。
概述
00-1010回答:在赋值操作过程中,当双方数据类型不一致时会发生类型转换。
如下所示:
公共类类型测试{ public static void main(string[]args){//操作时的隐式类型转换,整数字节a=3由两个整数相除得到;字节b=4;int num=a b;system . out . println(num);//7 //在赋值期间发生的隐式类型转换int ch=“0”;system . out . println(ch);//48 //运行时强制类型转换字节a1=12字节a2=12byte num 1=(byte)(a1 a2);system . out . println(num 1);//24 //赋值时发生的cast类型short b3=1234字节a3=(字节)B3;system . out . println(a3);//-46 }}跑步截图:
00-1010自动类型转换强制类型转换
00-1010规则:从小到大,低字节到高字节自动提升。
顺序:
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 ch1 = b; long lg2 = ch1; System.out.println(lg2); // 98 // char -- > double char ch2 = c; double dou = ch2; System.out.println(dou); // 99.0 // char -- > float char ch3 = d; float f3 = ch3; 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 ch1 = sh; System.out.println(ch1); }}
编译错误截图:
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 }}
运行截图:
boolean类型不能参与类型转换
代码展示:
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 sh1 = 78; bt = (byte) sh1; 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); } }
运行截图:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。