4
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です。

私は何が欠けていますか?

4

5 に答える 5

11

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、要件に応じて、

前置インクリメント演算子 ++

前置インクリメント式の値は、新しい値が格納された後の変数の値です。

于 2013-10-15T07:03:35.967 に答える
2
b && !(i++ > 0)

i++ポストインクリメントなので、ここの i の値はまだ 0 です

0>0間違い

b && 1真です ( !(0)1 であるため)

だからあなたは真実になっています。

于 2013-10-15T07:03:58.093 に答える