Javaの条件演算子 (三項演算子) のところをデコンパイルしてみた

以前、こんな感じのメソッドを見かけました。(かなり割愛してます)

int getValue(String arg) {
    return arg != null ? 0 : null;
}

条件演算子false のときに null が返ります。が、メソッドの戻り値は int で定義されています。

(そもそもイマイチなのは置いといて) これってコンパイルエラーにならないの?ということで、試しに以下のようなコードを書いてみました。

int getValue(String arg) {
    if (arg != null)
        return 0;
    else
        return null;
}

これはコンパイルエラーになります。(Type mismatch: cannot convert from null to int)

そこで、元の class ファイルをデコンパイルしてみました。

int getValue(String arg)
{
    return (arg == null ? null : Integer.valueOf(0)).intValue();
}

こんな感じでコンパイルされるのね...、というメモでした。

余談

こういうコードをデコンパイルすると、

return arg == null ? null : 0;

こうなります。

return (arg != null ? Integer.valueOf(0) : null).intValue();

冒頭に記載したコードでもそうなんですが、==!= が置き換わるのはなぜなんだろう。

コンパイラ謎い...。(それとも jad が謎なのか)