三、类型转换
各个类型之间的合法转换。
实心箭头,表示无信息丢失的转换;虚箭头, 表示可能有精度损失的转换。例如
int n = 123456789;
float f = n; // f is 1.23456792E8
// 整型int能够表示大约20亿的数值,而float的有效位数最大只有7位
类型转换规则:
如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型
否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。
否则, 两个操作数都将被转换为 int 类型。
强制类型转换:
除了上述的类型间合法转换,其他类型间的转换需要通过强制类型转换来完成。如double类型转成int类型。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。
double x = 9.997;
int nx = (int) x; // nx is 9
这样, 变量 nx 的值为 9。强制类型转换通过截断小数部分将浮点值转换为整型。如果想对浮点数进行舍人运算, 以便得到最接近的整数(在很多情况下, 这种操作更有用), 那就需要使用 Math_ round 方法:
double x = 9.997;
int nx = (int) Math.round(x) // nx is 10
tips:
如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。例如,(byte ) 300 的实际值为 44。
四、运算符
&&、||
&& 和丨| 运算符是按照“ 短路” 方式来求值的: 如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。如
果用 && 运算符合并两个表达式
expression1 && expression2
而且已经计算得到第一个表达式的真值为 false, 那么结果就不可能为 true。因此, 第二个表达式就不必计算了。可以利用这一点来避免错误。例如, 在下面的表达式中:
x != 0 && 1 / x > x + y // no division by 0
如果 x 等于 0, 那么第二部分就不会计算。因此,如果 X 为 0, 也就不会计算 1 / x , 除以 0 的错误就不会出现。
类似地, 如果第一个表达式为 true,
expression1 || expression2
的值就自动为 true, 而无需计算第二个表达式