這可能是一個微不足道的問題,但我遇到這種語法來爲一個數組聲明:與表達的Java數組聲明
void someFunction(int n){
int[] myArray = new int[ n == 0 ? 1 : n ];
...
}
我試着在網上找了一些教程來了解什麼是沒有運氣發生。
任何人都可以解釋在右括號中的表達式,什麼時候是通常使用的東西?
這可能是一個微不足道的問題,但我遇到這種語法來爲一個數組聲明:與表達的Java數組聲明
void someFunction(int n){
int[] myArray = new int[ n == 0 ? 1 : n ];
...
}
我試着在網上找了一些教程來了解什麼是沒有運氣發生。
任何人都可以解釋在右括號中的表達式,什麼時候是通常使用的東西?
這是一個三元運算符。評估?
之前的布爾語句,如果爲true,則表達式評估爲:
之前的值,否則評估爲第二個值。
這裏是陣列的長度爲5的簡單的聲明:
int[] myArray = new int[5];
n == 0 ? 1 : n
提供了許多(如果1
和n == 0
如果n
不),它是ternary operator一個例子。
所以
int[] myArray = new int[ n == 0 ? 1 : n ];
是速記
int[] myArray;
if (n == 0) {
myArray = new int[1];
} else {
myArray = new int[n];
}
它是用java三元運算符(?)用於檢查是否n爲0,如果n是零,創建尺寸1的陣列。
如果n> 1,則用它來創建數組。零長度數組在Java中是合法的,所以不知道作者的意思在這裏。
如果從壞的價值爲維護中應該已經檢查n > 0 ? n :1
,所以即使負值獲得大小的陣列1
由於@ATaylor和@SperanskyDanil說,
語法將創建數組大小1,當n=0
,它會創建大小爲n
的數組,當時n != 0
。
如下圖所示。
'n == 0?1:n'基本上是一個壓縮的if語句,如果條件爲真,它是第一個元素,如果它不是那麼它是第二個元素。在這種情況下,變量似乎是數組大小,並且代碼確保數組永遠不會大小爲零。 –