6

与えられた:

public class Spock {
    public static void main(String[] args) {
        Long tail = 2000L;
        Long distance = 1999L;
        Long story = 1000L;
        if ((tail > distance) ^ ((story * 2) == tail)) {
            System.out.print("1");
        }
        if ((distance + 1 != tail) ^ ((story * 2) == distance)) {
            System.out.print("2");
        }
    }
}

このサンプル コードが何も出力しないのはなぜですか?

4

4 に答える 4

11

最初に取得する場合はtrue ^ true = false
2 番目に取得する場合はfalse ^ false = false
becouse ^- is OR exclusiveopeartor, it's means

true ^ true = false  
true ^ false = true 
false ^ true = true 
false ^ false = false
于 2012-09-06T12:05:54.360 に答える
9

ブール排他的 ORを使用していますが、これは とほとんど同じ!=です。最初のケースでは両方の条件が true で、2 番目のケースでは両方の条件が false であるため、どちらの分岐も行われません。(これは IDE のデバッガーで確認できます)

唯一の本当の違いは、どちらよりも!=優先順位が高いことです&^

于 2012-09-06T12:05:40.690 に答える
4

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2から

For ^, the result value is true if the operand values are different; otherwise, the result is false.

于 2012-09-06T12:07:28.980 に答える
1

trueXOR 演算子が (整数ではなく) ブール引数で使用されている場合、2 つのオペランドのうちの 1 つが である場合にのみ返されるため、何も出力されませんtrue

あなたの最初ifの部分では、両方の部分が と に評価されtrueますtrue ^ true == false

あなたの2番目ifの部分では、両方の部分が と に評価されfalseますfalse ^ false == false

于 2012-09-06T12:07:55.247 に答える