类型转换
- 隐式转换是从数据位数低的转换成数据位数高的数据类型
- 不能对boolean类型进行类型转换。
- 如果对比int小的基本数据类型(如char,byte或short)进行算数运算或位运算,在运算之前,这些值会自动转换成int。**如果想把结果赋值给较小的类型,就必须使用类型转换。**对char、byte、或者short,复合赋值并不需要类型转换(如果结果的类型比被赋值变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原始类型转换)。
- 两个数值进行二元操作时,会有如下的转换操作:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
注:被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。(右边的变量类型需小于等于左边) - 不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f
float和double的精度
由于计算机中不能精确的表示浮点数,所以在程序中不能直接使用 == 来判断两个浮点数是否相等。例如:0.05+0.01的结果是0.060000000000000005。所以如果程序中的浮点数是经过计算或传感器生成的大概率会形成上述情况。
- 定义一个误差值epsilon = 0.001,使用Math.abs(double_x - 0) < epsilon)来判断是否相等。(适用于精度要求不高)
- 转换成字符串之后用equals方法比较,
Double.toString(double_x).equals(Double.toString(double_y))(适用于精度相同的情况) - 转换成Long之后用==方法比较
Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01) - 使用BigDecimal类型的equals方法或compareTo方法