タグ付けされた質問 「jls」

14
なぜx ==(x = y)は(x = y)== xと同じではないのですか?
次の例を検討してください。 class Quirky { public static void main(String[] args) { int x = 1; int y = 3; System.out.println(x == (x = y)); // false x = 1; // reset System.out.println((x = y) == x); // true } } Java言語仕様に、右側(x = y)と比較するために変数の前の値をロードすることを指示する項目があるかどうかはわかりません。 なぜ最初の式はにfalse評価されtrueますが、2番目の式はに評価されますか?私は(x = y)最初に評価されることを期待し、それからそれx自体と比較して(3)戻りtrueます。 この質問は異なっているJava式で部分式の評価順序という点で、xここでは間違いなく「部分式」ではありません。「評価」するのではなく、比較のためにロードする必要があります。質問はJava固有であり、表現はx == (x = y)、一般的に巧妙なインタビューの質問のために作成された、遠くにある非実用的な構成とは異なり、実際のプロジェクトからのものです。これは、比較および置換イディオムの1行の置換であると想定されていました …

2
事実上最終対最終-異なる動作
これまでのところ、実質的にfinalとfinalはほぼ同等であり、JLSは、実際の動作が同一でなくても、それらを同様に扱うと思いました。それから私はこの不自然なシナリオを見つけました: final int a = 97; System.out.println(true ? a : 'c'); // outputs a // versus int a = 97; System.out.println(true ? a : 'c'); // outputs 97 どうやら、JLSはここで2つの間に重要な違いをもたらし、その理由はわかりません。 私は次のような他のスレッドを読みました 最終と事実上最終の違い 事実上最終変数と最終変数 「事実上最終的」である変数はどういう意味ですか? しかし、それらはそのような詳細には入りません。結局のところ、より広いレベルでは、それらはほとんど同等であるように見えます。しかし、深く掘り下げると、明らかに異なります。 この動作の原因は何ですか?誰かがこれを説明するいくつかのJLS定義を提供できますか? 編集:私は別の関連するシナリオを見つけました: final String a = "a"; System.out.println(a + "b" == "ab"); // outputs true // …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.