if statement checks for null but still throws a NullPointerException

后端 未结 6 2096
無奈伤痛
無奈伤痛 2020-12-05 09:35

In this code.

public class Test {
     public static void testFun(String str) {
         if (str == null | str.length() == 0) {
             System.out.print         


        
6条回答
  •  甜味超标
    2020-12-05 10:22

    The edit shows exactly the difference between code that works and code that doesn't.

    This check always evaluates both of the conditions, throwing an exception if str is null:

     if (str == null | str.length() == 0) {
    

    Whereas this (using || instead of |) is short-circuiting - if the first condition evaluates to true, the second is not evaluated.

    See section 15.24 of the JLS for a description of ||, and section 15.22.2 for binary |. The intro to section 15.24 is the important bit though:

    The conditional-or operator || operator is like | (§15.22.2), but evaluates its right-hand operand only if the value of its left-hand operand is false.

提交回复
热议问题