1. 表达式 vs 语句
在 Java 中,区分两类是有帮助的:语句和表达式。语句通常被称为被执行,而表达式被称为被求值。但这不是最重要的。
语句和表达式之间的主要区别是计算表达式有一个结果。这个结果有一个类型,它可以赋值给一个变量或者用在其他一些表达式中。
例子:
代码 | 笔记 |
---|---|
int x; |
陈述 |
(a < 10) |
类型为的表达式boolean |
i++; |
i 类型与变量类型相同的表达式 |
x = 5; |
x 类型与变量类型相同的表达式 |
这给了我们什么?
首先,我们可以利用这样一个事实,即许多语句实际上是表达式(意味着它们的计算结果是一个值)。例如,像这样的代码将起作用:
代码 | 笔记 |
---|---|
|
|
其次,如果我们愿意,我们可以忽略计算表达式的结果。
代码 | 我们忽略结果的代码: |
---|---|
|
|
我们忽略计算表达式的结果,例如,如果表达式涉及做一些有用的事情,而这个动作对我们来说很重要,而不是结果本身。
2.三元运算符
这个生活黑客已经比上一个更有趣了。Java 有一个特殊的三元 运算符。它的语法有点类似于语句的语法if-else
:
Condition ? Expression 1 : Expression 2;
如果条件为真,则计算表达式 1 ,否则计算表达式 2 。条件后跟一个问号,两个表达式用冒号分隔。
三元运算符和语句的主要区别在于if-else
三元运算符是一个表达式,这意味着我们可以将其结果赋值给某物。
例如,假设我们要计算两个数中的最小值。使用三元运算符,此代码将如下所示:
int a = 2;
int b = 3;
int min = a < b ? a : b;
或者,假设您需要根据某些条件为变量分配不同的值。你是怎样做的?
一种选择是使用if-else
语句:
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
第二种选择是使用三元运算符,即if-else
语句的简写:
int age = 25;
int money = age > 30 ? 100 : 50;
那么哪个更好用——if-else
语句还是三元运算符?就执行速度而言,没有太大区别。这更多是代码可读性的问题。而这是非常重要的一点:代码不仅要能正确运行,而且要便于其他程序员阅读。
最简单的规则是:如果代码适合一行,则使用三元运算符;但如果它不适合一行,那么最好使用一个if-else
语句。
3.比较实数
如前所述,您不能只获取实数并进行比较。总是有可能丢弃一些有效数字,从而导致意想不到的副作用。
这就是为什么有一个经过时间考验的方法。如果两个实数相差非常小的值,则可以认为它们相等。例子:
double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
但这并不是我们需要担心的全部,因为数字之间的差异很可能会变成负数。因此,要使这种方法起作用,您不仅需要比较数字之间的差异,还需要比较数字之间差异的绝对值:|a-b|
Java有一种计算数字绝对值的方法Math.abs()
::
int m = Math.abs(value);
因此,我们上面示例的更正版本将如下所示:
double a = 1.000001;
double b = 1.000002;
if ( Math.abs(b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
GO TO FULL VERSION