自动类型提升和强制类型转换
自动类型提升
-
小到大的自动类型转换
-
两条路线
-
byte -> short -> int -> long -> float - > double
-
char -> int -> long -> float -> double
-
byte b = 20; // 这里 编译器会自动强制类型转换 (byte)20 short s = b; // b 中的 20 是 byte 类型,此时会自动转换为 short int x = s; // 小到大,同上
-
-
一点注意
- short 不可以与 short 和 byte 自动类型转换
-
-
表达式的自动类型提升
byte short char int long float double 1字节 2字节 2字节 4字节 8字节 4字节 8字节 但是存放数字的范围 int < long < float < double
-
如果表达式没有出现 long, float, double时,表达式的类型是 int
-
'c' - 'b' // 这个表达式的值为 1 int类型
-
-
当出现 long < float < double 时 ,哪个出现是哪种类型,都出现就是最大的那个
-
强制类型转换
一个大坑
-
你以为它不对,其实它是对的
-
byte a = (short) 15;
-
编译器会再次对其进行强制类型提升
byte a = (byte)((short) 15); // 庐山真面目
-
但是这就是不对的
int a = (long)17;
-
-
编译器会自动加上强制类型转换的
-
char s = 16; byte a = 1; short b = 2; // 以及坑 short c = (byte) 2;
-