このステートメントがJavaで機能しないのはなぜですかx ^= y ^= x ^= y;
-
27-09-2019 - |
質問
ジェネラコディセタグプレ
値が入れ替わると思いますが、x= 0とy= 1になります。 C言語で試したところ、正しい結果が得られました。
解決
あなたの声明は、この拡張された形式とほぼ同等です: ジェネラコディセタグプレ
Cとは異なり、Javaでは、二項演算子の左のオペランドが右のオペランドの前に評価されることが保証されています。評価は次のように行われます。 ジェネラコディセタグプレ
各xor式の引数の順序を逆にして、変数が再度評価される前に割り当てが行われるようにすることができます。 ジェネラコディセタグプレ
これは、よりコンパクトなバージョンであり、以下も機能します: ジェネラコディセタグプレ
しかし、これは2つの変数を交換するための本当に恐ろしい方法です。一時変数を使用することをお勧めします。
他のヒント
Markは、Javaでの評価方法について完全に正しいです。その理由は、JLS
これは同等です(§15.26による)。2 、複合代入演算子)から: ジェネラコディセタグプレ
操作の前に両方のオペランドを実行して、左から右に評価します。 ジェネラコディセタグプレ
シーケンスポイント間で同じ変数を2回変更しているため、Cでは未定義の動作であることに注意してください。
所属していません StackOverflow