Boolean b = null; if (b) { }Javaのコンパイラはコンパイルしてくれます.実行するとどうなるのか?という疑問が浮かび,Runtime系のExceptionが出るだろうと予想しながら試してみました.
public class BooleanTest { public static void main(String[] args) { Boolean b = null; if (b) { } } }続きに検証結果があります.
% javac BooleanTest.java % java BooleanTest Exception in thread "main" java.lang.NullPointerException at BooleanTest.main(BooleanTest.java:5)
NullPointerExceptionが発生しました.
逆コンパイルしてなぜNullPointerExceptionが発生するのか確認してみました.
public class BooleanTest { public static void main(String[] paramArrayOfString) { Object localObject = null; if (localObject.booleanValue()); } }
REPLのない言語は簡単な確認をするのも手間ですね.
ScalaのREPLで試すとこうなりました.
scala> val b:Boolean = null:7: error: type mismatch; found : Null(null) required: Boolean Note that implicit conversions are not applicable because they are ambiguous: both method Boolean2booleanNullConflict in class LowPriorityImplicits of type (x: Null)Boolean and method Boolean2boolean in object Predef of type (x: java.lang.Boolean)Boolean are possible conversion functions from Null(null) to Boolean val b:Boolean = null ^
以前,最後に結論があるのを期待すると言われたので最後にもう一度結果を書きます.
NullPointerExceptionが発生します.
Twitterでひしだまさんに教えていただいた通りでした.ありがとうございます.
https://twitter.com/hishidama/status/276246008197939200
0 件のコメント:
コメントを投稿