类型转换
-
自动类型转换
-
两种类型相互兼容
-
目标类型大于源类型
-
short s = 123; int i = s;//自动转换成功,编译通过 目标类型大于源类型 System.out.println(i);//输出结果 123 double d = i; System.out.println(d);//通过,输出结果 123.0
-
-
强制类型转换
-
两种类型相互兼容
-
目标类型小于源类型
-
short num = 123; byte target = num;//编译不通过,不兼容 byte target = (byte)num;//编译通过,强制转换 System.out.println(target);//输出结果 123 //小数强行转换为整数时,会损失精度 double x = 12.34; int y = (int)x; System.out.println(y);//失去精度,输出结果 12 //整数强行转换为整数时,会损失精度(大的往小的里面放) short m = 258; byte n = (byte)m; System.out.println(n);//失去精度,输出结果 2 //short 258 0000 0001 0000 0010 (258) //byte 2 0000 0010 (2) (舍弃高位,留下后位,符号位往后推)
-
强制类型转换规则
-
整数长度足够,数据完整。
-
int i = 100; byte b = (byte)i;//b = 100
-
整数长度不够,数据截断。
int i = 10000; byte b = (byte)i;//b = 16 (符号位变化,可能变为负数)
-
小数强转整数,数据截断。
double d = 2.5; int i = (int)d;//i = 2 (小数位舍掉)
-
字符整数互转,数据完整。
char c = 65; int i = c;//i = 65
-
boolean 的取值为 true/false ,不可与其他类型转换
-
-
-
表达式
-
使用运算符连接的变量或字面值,并可以得到一个最终结果
-
1 + 2; int a = 3; a-2;
-