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