截尾和舍入
在执行窄化转换时,必须注意截尾与舍入的问题。例如:如果将一个浮点数转换为整型值,Java会如何处理呢?如果将29.7转换为int,结果是30还是29?
public class Cast {
public static void main(String[] args) {
float f = 29.7f;
double d = 200.13213;
int i = (int)f;
System.out.println(i);
i = (int)d;
System.out.println(i);
}
}
【结果】
注意:在将float和double转型为整型值时,总是对该数字执行截尾。如果想得到舍入的结果,就需要使用java.lang.Math中的**round()**方法:
public class Cast {
public static void main(String[] args) {
float fabove = 0.7f, fbelow = 0.4f;
double dabove = 0.8, dbelow = 0.4;
System.out.println("fabove = " + Math.round(fabove));
System.out.println("fbelow = " + Math.round(fbelow));
System.out.println("dabove = " + Math.round(dabove));
System.out.println("dbelow = " + Math.round(dbelow));
}
}
【结果】
提升
如果对基本数据类型执行算术运算或按位运算,只要类型比int小(char、byte、short),那么在运算之前,这些值都会自动转换面int。
通常,表达式中出现最大的数据类型决定了表达式最终结果的数据类型。
如:将一个float类型值与一个double值相乘,结果为double;将一个int值与一个long值相加,结果为long。