首先来写一段代码
Integer a = null;
Integer b = 3;
boolean r1 = a == 24;
boolean r2 = a == b;
执行结果是:
boolean r1 = a == 24;将会产生运行时异常。
boolean r2 = a == b; r2 为false
为什么呢?我们看看编译代码(javac 前端编译器):
从编译代码中我们可以看到一个Integer和一个 int比较时 javac编译器会编译将Integer执行 intValue()操作然后执行if_icmpne。如果Integer为null将会抛出NPE。
Integer和一个 nteger比较时 javac编译器编译为直接对两个对象做if_acmpne比较