没有知识,我们就谈不到欣赏。——别林斯基
今天分享一个冷门基础小知识
我们一般使用boolean的类型,使用结构控制语句条件表达式的时候都是这样:
if (bar) {
}此处如果是一个基本类型,也就是boolean的时候,完全ok
但如果是一个包装类型的java.lang.Boolean对象,则在bar为null的时候,抛出
java.lang.NullPointerException这是因为底层调用了java.lang.Boolean#valueOf(boolean)拆箱
此处
代码语言:javascript复制@IntrinsicCandidate
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}由于添加了@IntrinsicCandidate注解,所以会调用其进行自动拆箱
因此如果是Boolean包装类型,则调用
if (bar) {
}等同于
代码语言:javascript复制if (Boolean.valueOf(bar)) {
}建议大家不要使用包装类型作为条件语句表达式,此处sonarlint也提到:
https://rules.sonarsource.com/java/RSPEC-5411/


