1. ホーム
  2. java

[解決済み】Javaの&と&&の違いは何ですか?

2022-04-16 21:51:53

質問

いつも思うのですが && 演算子は、そのブール型オペランドが両方とも true であること、そして & 演算子は、2つの整数型に対してビット単位の演算を行うために使用されます。

最近知ったのですが & 演算子は、そのブール型オペランドが両方とも true 唯一の違いは、LHSオペランドが偽であっても、RHSオペランドをチェックすることです。

& 演算子は内部的にオーバーロードされているのでしょうか?それとも何か他のコンセプトがあるのでしょうか?

どのように解決するのですか?

& <-- 両方のオペランドを検証します。

&& <-- 最初のオペランドが false と評価された場合、結果が false であるため、評価を停止します。

(x != 0) & (1/x > 1) <-- これは (x != 0) を評価し、次に (1/x > 1) を実行した後、& を実行します。問題は、x=0 の場合、例外が発生することです。

(x != 0) && (1/x > 1) <-- これは (x != 0) を評価し、これが真である場合にのみ (1/x > 1) x=0 ならば、これは完全に安全で例外も発生しません。 (1/x > 1) .

EDITです。

exprA | exprB <-- これは、次のように評価することを意味します。 exprA を評価し、次に exprB を実行した後 | .

exprA || exprB <-- これは、次のように評価することを意味します。 exprA であり、これが false を評価します。 exprB を実行し || .