天天看點

Java的的三元運算符

       在讀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;}