読者です 読者をやめる 読者になる 読者になる

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

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 が謎なのか)