对于以下条件语句:
if (a != null && a instanceof A)
或者if (a instanceof A)
首先检查null
是否有任何优势(例如在性能方面)?两个条件语句的结果应该是相等的。
检查null
是否有任何优势(例如在性能方面)?两个条件语句的结果应该是相等的。
对于以下条件语句:
if (a != null && a instanceof A)
或者if (a instanceof A)
首先检查null
是否有任何优势(例如在性能方面)?两个条件语句的结果应该是相等的。
检查null
是否有任何优势(例如在性能方面)?两个条件语句的结果应该是相等的。
没有任何优势,你可以只用
if(a instanceof A) {}
如果 a 是 null
,这将会评估为 false。
if(a instanceof A)
足以满足需求。
当a
为null时,使用if(a!=null && expr)
模式会抛出NullPointerException
。而a instanceof A
不会抛出NPE,如果a
为null,则返回false
。
instanceOf运算符不需要显式的空值检查,因为如果操作数为null,它不会抛出空指针异常。
在运行时,如果关系表达式的值不为null且引用可以转换为引用类型而不引发类转换异常,则instanceOf运算符的结果为true。
如果操作数为null,则instanceOf运算符返回false,因此不需要显式的空值检查。
考虑下面的例子,
public static void main(String[] args) {
if(a != null && a instanceof ArrayList){ //Violation
System.out.println("In if block");
}
else
{
System.out.println("In else block");
}
}
instanceOf的正确用法如下所示:
public static void main(String[] args) {
if(a instanceof ArrayList){ //Correct way
System.out.println("In if block");
}
else
{
System.out.println("In else block");
}
}
我非常怀疑先检查 null 是否有任何好处。这取决于虚拟机如何实现 instancof 检查... 可能性很大它会在代码的第一部分自行执行 if 语句。