Strange Null pointer exception case: ternary conditional operator not working with string concatenation

后端 未结 6 1384
你的背包
你的背包 2020-12-21 07:54
StringBuffer sb=null;

// Some more logic that conditionally assigns value to the StringBuffer

// Prints Value=null
System.out.println(\"Value=\"+sb);

// Throws Nu         


        
6条回答
  •  甜味超标
    2020-12-21 08:17

    I think the issue is that the statement is being parsed like this:

    System.out.println( ("Value="+sb) != null ? sb.toString() : "Null" );
    

    The string concatenation operator (+) has a heigher precedence than the ternary operator.

    Since "Value"+null is always not null, sb.toString() will always be called, even if sb is null, hence the NullPointerException.

    If in doubt - parenthesize! Even if not in doubt! :)

提交回复
热议问题