Skip to content

Instantly share code, notes, and snippets.

@adamretter
Created October 12, 2014 11:39
Show Gist options
  • Save adamretter/2446618f295cdfb3e458 to your computer and use it in GitHub Desktop.
Save adamretter/2446618f295cdfb3e458 to your computer and use it in GitHub Desktop.
public class TernaryNpe {
public static void main(String args[]) {
final String a = "a";
final String aa = "aa";
final String b = null;
final String bb = "";
/* Test Case 1 */
//OK
boolean result = b == null ^ bb == null ?
false : bb == null ? true : b.equals(bb);
//NPE
result =
a.equals(aa)
&& b == null ^ bb == null ?
false : bb == null ? true : b.equals(bb);
/* Test case 2 */
//OK
result = (b == null ^ bb == null) ?
false : (bb == null ? true : b.equals(bb));
//NPE
result =
a.equals(aa)
&& (b == null ^ bb == null) ?
false : (bb == null ? true : b.equals(bb));
/* Test case 3 */
//OK
result = ((b == null ^ bb == null) ?
false : (bb == null ? true : b.equals(bb)));
//NPE
result =
(a.equals(aa)
&& (b == null ^ bb == null) ?
false : (bb == null ? true : b.equals(bb)));
System.out.println("RESULT=" + result);
}
}
@adamretter
Copy link
Author

Correct implementation is:

result =
            a.equals(aa)
            && (b == null ^ bb == null) ?
            false : (bb == null || b == null ? true : b.equals(bb));

or for Java 7:

result = 
            a.equals(aa)
            && Objects.equals(b, bb)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment