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