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 // …