在讀ArrayList源代碼的時候看到這樣一個方法
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
對其中return中用到的?:表達式不是很了解,于是總結了一下,如下所示
一 三元表達式簡介
Java提供一個特别的三元運算符(ternary)經常用于取代某個類型的if-then-else語句。這個運算符就是? :。該符号初看起來有些迷惑,但是一旦掌握了它,用?運算符是很友善高效的。(Java類庫中出現充分說明了這一點)
二 運算符的通用格式如下:
expression1 ? expression2 : expression3
其中,expression1是一個布爾表達式。如果expression1為真,那麼expression2被求值;否則,expression3被求值。整個?表達式的值就是被求值表達式(expression2或expression3)的值。expression2和expression3是除了void以外的任何類型的表達式,且它們的類型必須相同。下面是一個利用?
三 運算符的例子:
當Java計算這個表達式時,它首先看問号左邊的表達式。如果denom等于0,那麼在問号和冒号之間的表達式被求值,并且該值被作為整個?表達式的值。如果denom不等于零,那麼在冒号之後的表達式被求值,并且該值被作為整個?表達式的值。然後将整個?表達式的值賦給變量ratio。
條件 ? a : b;
等同于
if(條件) { a;} else { b;}