Java 中的“––>”是什麼意思?
1. 概述
當我們閱讀別人的代碼時,有時我們可以看到一些我們以前從未見過的有趣且新穎的方法。了解這些技巧的作用可以顯著增強我們對代碼庫的理解,並鼓勵我們探索 Java 編程的觀點。
在本教程中,我們將討論 Java 中的一個有趣用法: -->
2.問題介紹
像往常一樣,讓我們從一個例子開始:
int i = 6;
while ( i-->0 ) {
// some processing in loop
}
乍一看,這段代碼非常簡單。 while
循環重複執行一些邏輯。
然而,如果我們仔細看看while
語句,表達式i-->0
做了什麼?我們以前可能沒有見過-->
運算符的用法。如果我們搜索 Java 文檔,我們能找到的最接近的運算符是 lambda 表達式中使用的“->”運算符。但顯然,示例中的代碼與 lambda 表達式無關。
那麼接下來,我們首先弄清楚-->
是做什麼的。然後,我們將對其他類似的技巧進行一個簡短的測驗。
為簡單起見,我們將使用單元測試斷言來呈現變量值,而不是在本教程中打印它們。
3. 理解' `-->` '
首先, ( i-->0 )
中的“ -->
”不是 Java 運算符。實際上, (i-->0)
與(i-- >0)
相同或更清晰的格式: ((i--) > 0)
。
因此,它執行兩個操作:後遞減i
和“大於0
”檢查。
當我們用值6
初始化變量i
時,它會在循環內生成一個數字序列:5、4、3、2、1 和 0。按照此序列, i
轉換為 -1,導致循環終止:
List<Integer> resultWhile = new ArrayList<>();
int i = 6;
while (i-- > 0) {
resultWhile.add(i);
}
assertEquals(Lists.newArrayList(5, 4, 3, 2, 1, 0), resultWhile);
同樣,我們可以在for-loop:
List<Integer> resultFor = new ArrayList<>();
for (int j = 6; j-- > 0; ) {
resultFor.add(j);
}
assertEquals(Lists.newArrayList(5, 4, 3, 2, 1, 0), resultFor);
現在我們已經清楚地了解了-->
作用。讓我們在即將到來的測驗部分探索並嘗試一些類似的技巧。
4. 測驗時間!
該測驗有四個挑戰。
假設我們有一個整數列表:
List<Integer> result = new ArrayList<>();
每次挑戰時,都會重置整數列表,然後在while
循環中逐漸插入數字。我們的目標是在循環執行後確定列表中的數字。
第一個挑戰是理解++<
。
4.1.理解' `++<` '
int i = -1;
while (i++<5) {
result.add(i);
}
與-->
類似, “ i++<5
”後遞增i
,然後將i
與 5 進行比較。由於i
的初始值為-1
,因此結果將為0
到5
:
assertEquals(Lists.newArrayList(0, 1, 2, 3, 4, 5), result);
接下來,讓我們解釋另一個表達式<--
。
4.2.理解' `<--` '
result.clear();
int j = 10;
while (0<--j) {
result.add(j);
}
這次,如上面的代碼所示,將後遞減操作更改為預遞減操作。因此,循環將9
比1
填充到列表中:
assertEquals(Lists.newArrayList(9, 8, 7, 6, 5, 4, 3, 2, 1), result);
然後,讓我們看一下類似的表達式>++
。
4.3.理解' `>++` '
result.clear();
int n = 0;
while (6>++n) {
result.add(n);
}
正如我們在代碼片段中看到的, '6>++n'
預先遞增i
,然後在每個循環步驟中與6
進行比較。因此,我們將得到1
到5
的結果:
assertEquals(Lists.newArrayList(1, 2, 3, 4, 5), result);
最後,讓我們看看一個看起來有點不同的挑戰。
4.4.理解' `>>>=` '
result.clear();
int x = 32;
while ((x>>>=1)>1) {
result.add(x);
}
這個挑戰與其他挑戰不同。 x>>>=1
與前/後遞增或前/後遞減無關。 >>>
是無符號右移運算符。
因此, `x>>>1`
右移一位,結果與x/2相同。此外, x >>>=1
執行移位運算並將結果重新分配給變量x
。因此,給定x=32,
結果列表包含16
、 8
、 4
和2
:
assertEquals(Lists.newArrayList(16, 8, 4, 2), result);
到目前為止,我們已經解決了這些挑戰並了解了“ `-->`
”和類似技巧的作用。
5. 結論
在本文中,我們討論了-->
在 Java 中的作用。此外,我們還進行了一項測驗,探索一些類似的技巧。
值得注意的是,使用這些格式時,建議在兩個運算符之間插入空格或大括號。這種做法增強了代碼的可讀性。例如,最好寫成i-- > 0
或(i--) > 0
而不是i-->0.
與往常一樣,示例的完整源代碼可在 GitHub 上獲取。