タグ付けされた質問 「compound-assignment」


7
Javascript Ternary演算子による演算子の優先順位
このコードの最初の部分(+ =)を三項演算子と組み合わせて頭を抱えているようには見えません。 h.className += h.className ? ' error' : 'error' このコードが機能する方法は次のとおりです。 h.className = h.className + h.className ? ' error' : 'error' しかし、それは私のコンソールにエラーを与えるため、正しくありません。 だから私の質問は、このコードをどのように正しく解釈すべきかということです?

8
Javaのショートカット「or-assignment」(| =)演算子
私はJavaで実行する比較の長いセットを持っています、そしてそれらの1つ以上が本当であるかどうか知りたいのですが。比較の文字列は長くて読みにくいので、読みやすくするために分割し、|=ではなく自動的にショートカット演算子を使用しましたnegativeValue = negativeValue || boolean。 boolean negativeValue = false; negativeValue |= (defaultStock < 0); negativeValue |= (defaultWholesale < 0); negativeValue |= (defaultRetail < 0); negativeValue |= (defaultDelivery < 0); negativeValuedefault <something>値のいずれかが負の場合、私はtrueになると期待しています。これは有効ですか?それは私が期待することをしますか?Sunのサイトやstackoverflowで言及されているのを確認できませんでしたが、Eclipseには問題がないようで、コードがコンパイルされて実行されます。 同様に、いくつかの論理的な交差を実行したい場合、&=代わりに使用でき&&ますか?

7
「k + = c + = k + = c;」にインライン演算子の説明はありますか?
次の操作の結果の説明は何ですか? k += c += k += c; 次のコードからの出力結果を理解しようとしました: int k = 10; int c = 30; k += c += k += c; //k=80 instead of 110 //c=70 現在、私は "k"の結果が80である理由を理解するのに苦労しています。なぜk = 40を割り当てても機能しないのですか(実際、Visual Studioはその値が他で使用されていないことを通知しています)。 なぜkは110ではなく80なのですか? 操作を次のように分割した場合: k+=c; c+=k; k+=c; 結果はk = 110です。 私はCILを調べようとしましたが、生成されたCILの解釈はそれほど深くなく、いくつかの詳細を取得できません。 // [11 13 - 11 24] IL_0001: …

12
Javaに条件演算子と条件演算子の複合代入バージョンがないのはなぜですか?(&& =、|| =)
だから、ブール型の二項演算子のために、Javaがあり&、|、^、&&と||。 ここで彼らが何をしているのかを簡単に要約しましょう: JLS 15.22.2ブール論理演算子&、^、および| JLS15.23条件付き-および演算子&& JLS15.24条件付きまたは演算子|| の場合&、結果値はtrue、両方のオペランド値がtrue;の場合です。それ以外の場合、結果はfalseです。 の場合|、結果値はfalse、両方のオペランド値がfalse;の場合です。それ以外の場合、結果はtrueです。 の場合^、結果値はtrue、オペランド値が異なる場合です。それ以外の場合、結果はfalseです。 &&オペレータは次のようである&が、その左側の値がオペランドその右側のオペランドた場合にのみ評価されますtrue。 ||オペレータは次のようである|が、その左側の値がオペランドその右側のオペランドた場合にのみ評価されますfalse。 現在、5つすべてのうち、3つには複合代入バージョン、つまり、、|=が&=あり^=ます。だから私の質問は明白です:なぜJavaは提供しません&&=と||=同様?必要以上に必要だ&=と思います|=。 そして、「長すぎるから」というのは良い答えではないと思います。Javaには>>>=。この省略にはもっと良い理由があるに違いありません。 15.26代入演算子から: 12個の代入演算子があります。[...]= *= /= %= += -= <<= >>= >>>= &= ^= |= &&=と||=が実装された場合、最初に右側を評価しないのはそれだけであるというコメントがありました。複合代入演算子が最初に右側を評価するというこの概念は間違いだと思います。 15.26.2複合代入演算子: フォームの複合代入式は、E1 op= E2と同等ですE1 = (T)((E1) op (E2))。ここTで、はのタイプですがE1、E1評価されるのは1回だけです。 証拠として、次のスニペットは、NullPointerExceptionではなく、をスローしArrayIndexOutOfBoundsExceptionます。 int[] a = null; int[] b = {}; a[0] += b[-1];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.