短路求值(短路操作符和非短路操作符)
一、总结
1、短路操作符和非短路操作符
二、短路求值
1、&&、|| 为短路操作符。
eg :
expr1 && expr2 //若expr1计算后若为false,则不再计算expr2的值,因为该式肯定为false。否则,计算expr2的值。
expr1 || expr2 //若expr1计算后若为true,则不再计算expr2的值,因为该式肯定为true。否则,计算expr2的值 。
2、& 和 | 是为非短路操作符。
eg:
expr1 & expr2 //计算expr1后,再计算expr2(无论expr1为true/false) ,将这二个结果作“与”运算为整个表达式的值。
expr1 | expr2 //计算expr1后,再计算expr2(无论expr1为true/false) ,将这二个结果作“或”运算为整个表达式的值。
3、小例
String str = null;
boolean bflag = false;
bflag = ((str == null) | str.length() > 10); //抛出java.lang.NullPointerException(空指针异常)
bflag = ((str != null) & str.length() > 10); //抛出java.lang.NullPointerException(空指针异常)
bflag = ((str == null) || str.length() > 10);//bflag = true(无任何异常,由于短路求值)
bflag = ((str != null) && str.length() > 10);//bflag = false(无任何异常,由于短路求值)