int i = 0;
boolean b = true;
System.out.println(b && !(i++ > 0))
上記のコードをコンパイルすると、値 true が返されます。
しかし、引数の 2 番目の部分 (b は既に true であるため) は基本的に
(0 + 1 > 0) => (1 > 0)
を返す必要がありtrue
ます。その場合、ステートメントは になります。true && false
これはfalse
です。
私は何が欠けていますか?
int i = 0;
boolean b = true;
System.out.println(b && !(i++ > 0))
上記のコードをコンパイルすると、値 true が返されます。
しかし、引数の 2 番目の部分 (b は既に true であるため) は基本的に
(0 + 1 > 0) => (1 > 0)
を返す必要がありtrue
ます。その場合、ステートメントは になります。true && false
これはfalse
です。
私は何が欠けていますか?
Javaが正しく動作しています:)
i++
それが後置インクリメントです。
結果を生成し、後でその値をインクリメントしました。
!(i++ > 0) // now value is still zero
i++
value
前のものを使用し、i
それからそれを行いincrement
ます。
++ を使用すると、次のようになります
temp=i;
i += 1;
i=temp; // here old value of i.
値 1 が変数の値に加算され、合計が変数に格納されます。……
後置インクリメント式の値は、新しい値が格納される前の変数の値です。
可能な解決策は++i
、要件に応じて、
前置インクリメント式の値は、新しい値が格納された後の変数の値です。
b && !(i++ > 0)
i++
ポストインクリメントなので、ここの i の値はまだ 0 です
0>0
間違い
b && 1
真です ( !(0)
1 であるため)
だからあなたは真実になっています。