以前、こんな感じのメソッドを見かけました。(かなり割愛してます)
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();
冒頭に記載したコードでもそうなんですが、==
と !=
が置き換わるのはなぜなんだろう。