2016-01-06 52 views
0

我有這樣的:Java的異常行爲檢查循環條件

while(victim.getHealth() > 1 && !victim.getName().equals(this.getName())) { 
    victim.hurt(); 
} 

現在我注意到,在特殊場合victim.getName()將返回null(這是希望的行爲)。但是,當這種情況下,我期待NullPointerException發生,因爲我們基本上調用null.equals(this.getName())的第二個條件。

但是這不會發生。如果我切換循環條件的順序,例如

while(!victim.getName().equals(this.getName()) && victim.getHealth() > 1) { 
    victim.hurt(); 
} 

getName()返回null時將引發NullPointerException。

另外:如果這是||條件而不是& &,在java中,一旦程序發現一個正確的程序將停止檢查真正的條件?

+0

http://stackoverflow.com/questions/4014535/differences-in-boolean-operators-vs-and-vs – HRgiger

回答

0

我沒有注意到,在這種特殊情況下,getName()== null victim.getHealth()將始終低於1,所以java永遠不會達到第二個條件。對不起,我現在需要休息一下。 :D