Java学习笔记3—变量的类型转换

一、自动类型转换

废话不多说,直接举个例子吧

double a=1;
System.out.println(a);

在这种情况下,给double型的a赋值一个int值的1,这种情况下是可以通过编译的,输出的结果是1.0,说明系统将int型的a=1自动转为了double型的a=1.0。

自动类型转换是取值范围小的类型转为取值范围大的类型,反之将会报错。

思考1:以下的代码能不能通过编译

int a=100;
a=a+0.5;

答案:上面的代码是不可以通过编译的,a为int型,0.5为double型,当int型与double型相加时,结果范围扩大,变为float型(就强原则)。double型不可赋值给int型,所以不能通过编译。

思考2:以下的代码能不能通过编译

byte a=1;
a=a+1;

答案:同理,上面的代码不可以通过编译,1默认为int型,所以a+1的结果为int型,int型不可赋值给byte值。

二、强制类型转换

直接上代码

double a = 3.14;
int b = (int)a;
System.out.println(b);

输出结果为3。

强制类型转换在使用时,先要定义一个转换后类型的值,用来接收装转后的结果,等号右边要把转换后的类型放在括号中,后面跟上需要转换的值。强制类型转换在使用时通常会造成数据的丢失,因此不建议使用。

思考1:以下代码能不能通过编译

int a=1;
a+=0.5;

答案:这种情况是可以通过编译的。很多人认为a+=0.5不是等价于a=a+0.5吗,为什么还可以通过编译?其实a+=0.5隐藏了一个操作 a+=(int)0.5 ,将double型的0.5强制类型转换为int型。

拓展:以下代码强转后,b的值为多少

byte b=(byte)130;
System.out.println(b);

下期我会专门写一篇文章来讨论这道拓展哦!

经验分享 程序员 微信小程序 职场和发展