2016-11-25 3 views
-1
public class j68 { 
    public static void main(String args[]){ 
     System.out.print(1==2||true); 
    } 
} 


public class j68 { 
    public static void main(String args[]){ 
     System.out.print(1==2|true); 
    } 
} 

上記の両方が真であることを意味します。 ||の代わりに?論理ORとビットOR

答えて

0

いくつか理由がありますが、大部分はいいえです。

|(ビット単位)と||(論理)の間には大きな違いがあります:ビット単位|、で両方のオペランドは常に評価されます。 (どちらが最初に評価されるかは保証されていないと思いますが、少なくとも、私はただちにJLS§15.22.2を参照していませんが、おそらく他の場所では保証があります)。論理演算子||では、左手の結果が偽であれば、右手はと評価されます。

次のような防御的なもの、やっている場合、これは問題にすることができます:私たちはobjnull||、の代わりに|を使用した場合に失敗する

boolean flag = obj == null || obj.flag; 

を。我々はNullPointerExceptionを得るだろう。

別に、あなたのコードを読んで作業しなければならない問題があります。|を使用すると、通常||が使用されるのは驚くべきことです。しかしそれはスタイルの問題です。