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);
下期我会专门写一篇文章来讨论这道拓展哦!
下一篇:
Java的基本数据类型和类型转换规则