数据类型的转化
前言
八种基本数据类型,除了boolean类型之外的七种类型是可以自动转化的。甚至,我们也可以使用“强制类型转换”将数据类型变成我们所需要的。
自动类型转化
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。
如图所示,实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
可以将整型常量直接赋值给byte、short、 char 等类型变量,而不需要进行强制类
型转换,只要不超出其表数范围即可。
自动类型转换特例:
short b = 12;//合法
short b = 1234567;//非法,1234567超出了short的表数范围
强制类型转化
强制类型转换,又被称为造型( cast) , 用于强制的转换一个数值的类型。在有可能丢
失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
语法格式:
(type)var
运算符"()"中的type表示将值var想要转换成的目标数据类型。
强制类型转换:
double X = 3.14;
int nx = (int)x; //值为 3
charc = 'a';
int d= C+1;
System.out.println(nx);
System.out.println(d);
System.out.println((char)d);
运行结果:
当将一种类型强制转换成另一 种类型, 而又超出了目标类型的表数范围, 就会被截断成为一个完全不同的值。
强制类型转换特例
int x= 300;
byte bx = (byte)x;//值为44
注意:
不能在布尔类型和任何数值类型之间做强制类型转换
基本类型转化时常见的错误和问题
操作比较大的数时 ,要留意是否溢出,尤其是整数操作时。
类型转换常见问题一:
int money = 1000000000; //10亿
int years = 20;
//返回的total是负数,超过了int的范围
int total = money*years;
System.out.println("total= " + total);
//返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long.但是已经发生了数据丢失
long total1 = money*years;
System.out.println("total1=" +total1);
//返回的total2正确:先将一个因子变成long ,整个表达式发生提升。全部用long来计算。
long total2 = money*((long)years);
System.out.println("total2=" +total2);
运行结果:
L和1的问题:
不要命名名字为I的变量,字母|容易和数字1混淆。
long类型使用大写L ,不要用小写l。.
类型转换常见问题二:
int l = 2; //分不清是L还是1,
long a = 23451l://建议使用大写L
System.out.println(l+1);|