变量占用的字节
我们都知道基本类型,byte跟boolean是1个字节,short跟char是2个字节,int跟float是4个字节,long跟double是8个字节。
类型转换
小类型是可以直接向大类型转换的,但是反过来,就有可能造成数据丢失,必须显式的进行类型转换。同时浮点类型向整数类型转换,也有可能造成数据丢失,必须显式转换。
int a = (int) 101L;
int b = (int) 1.1f;
float c = 11;
long d = 11;
这里浮点数转换成整数,默认进行的是截尾操作,如果要进行取舍,可以使用Math.round()方法。
还有一种特殊情况,就是两个整数类型相除的时候,必须要对其中一个进行类型转换,才能得到一个浮点数。比如下面这段代码,p1得到的结果是1.0,只有p2和p3才能得到正确的结果。
float p1 = (float)((1 + 4) / 3);
float p2 = (float)(1 + 4) / 3;
float p3 = (1 + 4) / (float)3;
一个大类型跟一个小类型数据进行运算,比如加减乘除,会自动转换成大类型,如果要赋值给小类型,也必须显式转换。
int i = (int) (101L + 11);
最后,在java中进行按位运算的时候,会自动转换成int类型。
byte a = 9;
byte b = 6;
byte c = (byte) (a | b);
虽然java中整数的默认类型是int,但是上面直接把9赋值给byte类型是可以的,因为编译器能够识别这个常量在byte能够接受的范围内。