java中的数据类型有引用数据类型和基本数据类型。
引用数据类型:对象,数组,接口。
基本数据类型:byte(1B),short(2B),char(2B),int(4B),long(8B),float(4B),double(8B)。
可以想到,占用字节数越多的类型的数据精度越高。在java里,精度低的数据向精度高的数据类型转换系统可以自动完成。但是精度高的数据类型向精度低的数据类型转换是需要强制转换的。数据类型的兼容关系如下:
byte->short/char->int->long->float->double
下面总结几种常见的转换:
1.隐式转换
(1)表达式运算时低精度数据自动转向高精度。
System.out.print(7.0/2);
System.out.print('a'+1);
结果分别为3.5和98。 有多种数据类型混合运算时,系统将自动所有数据转换成精度最大的那个类型,然后进行运算。
(2)赋值时低精度数据自动转向高精度。
double a=7;
System.out.print(a);
结果是7.0。
2.显示转换
(1)赋值时高精度数据转向低精度
int a=(int)7.0;
System.out.print(a);
结果是7。
(2)数据超过范围时进行的高向低强制转换
java默认所有的整数类型为int,默认所有浮点数为double型。
long a=222222222222L;
在数字后面加个L的原因:222222222222已经超出了默认的int类型的范围了,在后面加个L是为了告诉编译器这个数是long型的。注意这里并不是强制类型转换,只是一个声明,告诉编译器这个数是long型的,因为int转向long也根本不需要强制转换。
byte a=(byte)128;
由于byte只能表示到127。128已经超出范围,所以需要进行强制转换。
byte,short只是形式上的,他们是取int的最低1B/2B。当范围在其内,int与他们的操作不需要强制转换。