1. 表达式 vs 语句

在 Java 中,区分两类是有帮助的:语句表达式。语句通常被称为被执行,而表达式被称为被求值。但这不是最重要的。

语句和表达式之间的主要区别是计算表达式有一个结果。这个结果有一个类型,它可以赋值给一个变量或者用在其他一些表达式中。

例子:

代码 笔记
int x; 陈述
(a < 10) 类型为的表达式boolean
i++; i类型与变量类型相同的表达式
x = 5; x类型与变量类型相同的表达式

这给了我们什么?

首先,我们可以利用这样一个事实,即许多语句实际上是表达式(意味着它们的计算结果是一个值)。例如,像这样的代码将起作用:

代码 笔记
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

其次,如果我们愿意,我们可以忽略计算表达式的结果。

代码 我们忽略结果的代码:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

我们忽略计算表达式的结果,例如,如果表达式涉及做一些有用的事情,而这个动作对我们来说很重要,而不是结果本身。


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");