作者attanti (囧rz)
看板java
标题Re: [问题] && 和 &
时间Sat Aug 19 13:08:36 2006
※ 引述《seekyou (galagala~N )》之铭言:
: public class ShortCircuit {
: public static void main(String[] args) {
: String s=null;
: if((s != null) && s.length() > 20)
: System.out.println(s);
: String t=null;
: if((t != null) & t.length() > 20)
: System.out.println(t);
: }
: }
: 如题,第一个if不会印出东西,(短路运算子)
: 第二个if为什麽会有NullPointerException呢?
: 谢谢回应
两个运算子本身的意义就不同
&& 是因为是Logical的"AND", 只有左运算子为true时才会去运算右运算子,
输出为boolean,
& 是bitwise的"AND", 只能做两边运算子是boolean/Boolean或int/Integer
输出看两边如果至少有一边是boolean, 那就是boolean, 如果都是int,
那就是int
第一个判断式, 意义为: 若
左运算子(s != null)的结果"和"
右运算子(s.length..)的结果
都为真, 则System.ooxx...那因为照前述, 左运算子的结果为false,整句
运算子不可能为真, 所以右运算子就不管了
第二个判断式的意义为
"左运算子的结果"和"右运算子的结果"做bitwise的AND
所以两个运算子一定都要得到结果才能算
compiler并不会先去检查左运算子, 发现他是0了, 就乾脆不做AND(why?)
所以第二个在运算右运算子的时候会出事.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.209.4