2.5 算术运算符
运算符(operator)是表示简单计算的符号,例如,加法运算符为 +,减法运算符为 -,乘法运算符为 *,而除法运算符为 /。
下面的程序将时间转换为分钟数:
int hour = 11;int minute = 59;System.out.print("Number of minutes since midnight: ");System.out.println(hour * 60 + minute);
在这个程序中,hour * 60 + minute 是一个表达式(expression),表示计算将得到的单个值。这个程序运行时,每个变量都被替换为当前值,再执行运算符指定的计算。运算符使用的值称为操作数(operand)。
前述示例的结果如下:
Number of minutes since midnight: 719
表达式通常由数字、变量和运算符组成。程序编译并执行时,表达式将变成单个值。
例如,表达式 1 + 1 的值为 2。对于表达式 hour - 1,Java 将变量 hour 替换为其当前值,因此这个表达式变成 11 - 1,结果为 10。对于表达式 hour * 60 + minute,其中的两个变量都被替换了,整个表达式变为 11 * 60 + 59。先执行乘法运算,因此这个表达式变为 660 + 59;再执行加法运算,结果为 719。
加法、减法、乘法运算都与你的预期一样,但除法运算可能会让你感到意外。例如,下面的代码片段试图将分钟数转换为小时数:
System.out.print("Fraction of the hour that has passed: ");System.out.println(minute / 60);
其输出如下:
Fraction of the hour that has passed: 0
这样的结果令人感到迷惑。变量 minute 的值为 59,59 除以 60 的结果应为 0.98333,而不是 0。问题在于 Java 在两个操作数都为整数时执行“整数除法”,而根据设计,整数除法总是向下圆整,即便这里的结果更接近下一个整数时也是如此。
一种替代方式是,计算百分比而不是小数:
System.out.print("Percent of the hour that has passed: ");System.out.println(minute * 100 / 60);
上述代码的输出如下:
Percent of the hour that has passed: 98
同样,结果也被向下圆整了,但至少离正确的答案更近了。
