java中类型自动转换机制的示例分析(java,开发技术)

时间:2024-04-30 21:20:23 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

类型自动转换机制解析

概述

  • 自动类型转换也叫隐式类型转换

  • 表达式的数据类型自动提升

所有的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类型。

自动类型转换 & 强制类型转换

什么时候会发生类型转换

答: 赋值 | 运算时 ,两边数据类型不一致时就会发生类型转换

如下:

publicclassTypeTest{publicstaticvoidmain(String[]args){ //运算时发生的隐式类型转换,两整数相除得到的还是一个整数bytea=3;byteb=4;intnum=a+b;System.out.println(num);//7//赋值时发生的隐式类型转换intch='0';System.out.println(ch);//48//运算时发生的强制类型转换bytea1=12;bytea2=12;bytenum1=(byte)(a1+a2);System.out.println(num1);//24//赋值时发生的强制类型转换shortb3=1234;bytea3=(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字节)

画图分析:

java中类型自动转换机制的示例分析

代码展示:

publicclassTypeDemo{publicstaticvoidmain(String[]agrs){//byte-->shortbyteb1=127;shorts1=b1;System.out.println(s1);//127//short-->intshorts2=30000;inti=s2;System.out.println(i);//30000//int-->longintnum=2100000000;longlg=num;System.out.println(num);//2100000000//long-->floatlonglg1=200000000000000L; floatf1=lg1;System.out.println(f1);//2.00000001E14//float-->doublefloatf2=3.14f;doubled1=f2; System.out.println(d1);//3.140000104904175//char-->int charch='a';inti1=ch;System.out.println(i1);//97//char-->longcharch2='b';longlg2=ch2;System.out.println(lg2);//98//char-->doublecharch3='c';doubledou=ch3;System.out.println(dou);//99.0//char-->floatcharch4='d';floatf3=ch4;System.out.println(f3);//100.0}}

运行截图:

java中类型自动转换机制的示例分析

注意:

byte、short不能和char进行相互转换

代码展示:

publicclassTypeDemo2{publicstaticvoidmain(String[]agrs){ //byte-->charbytebt=127;charch=bt;System.out.println(ch);//short-->charshortsh=12;charch2=sh;System.out.println(ch2);}}

编译错误截图:

java中类型自动转换机制的示例分析

float虽然是4个字节,但是float比long表示的数据范围更大。说明数据范围的大小和字节的大小不一定相关

代码展示:

publicclassTypeDemo3{publicstaticvoidmain(String[]agrs){longlg=20000000000000L;floatf1=lg;System.out.println(f1);//1.99999997E13}}

运行截图:

java中类型自动转换机制的示例分析

boolean类型不能参与类型转换

代码展示:

publicclassTypeDemo4{publicstaticvoidmain(String[]agrs){booleanflag=12;intflag1=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中类型自动转换机制的示例分析

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

代码展示:

publicclassTypeDemo5{publicstaticvoidmain(String[]agrs){//float-->long//finalfloatPI=3.14f;//longnum=(long)PI;//3//floatlittle=3.14f;//longnum=(long)little;//3 longnum=(long)3.14f;System.out.println(num);//3//double-->float//doubledou=3.14;//floatlittle1=(float)dou;//3.14//floatlittle1=(float)3.14d;//3.14finaldoubledou=3.14;floatlittle1=(float)dou;System.out.println(little1);//3.14//long-->int//longnum1=2000000000000L;//intnum2=(int)num1;//-1454759936//intnum2=(int)2000000000000L;//-1454759936 finallongnum1=2000000000000L;intnum2=(int)num1;System.out.println(num2);//-1454759936//int-->short//intnum3=12;//shortnum4=(short)num3;//12//shortnum4=(short)40000;//-25536finalintnum3=60;shortnum4=(short)num3;System.out.println(num4);//60//short-->bytefinalshortsh=12345;bytebt=(byte)sh;System.out.println(bt);//57shortsh2=78; bt=(byte)sh2;System.out.println(bt);//78}}

运行截图:

java中类型自动转换机制的示例分析

注意:

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

代码展示:

publicclassTypeDemo6{publicstaticvoidmain(String[]agrs){shorta=1245;byteb=(byte)a;System.out.println(b);}}

运行截图:

java中类型自动转换机制的示例分析

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:java中类型自动转换机制的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C语言如何求最大公约数下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18