Re: [問題] && 和 &
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章