System.out.println(1+2+"3");
System.out.println("1"+2+3);
出力:-
33
123
最初のケースは理解できますが、2 番目のケースは明確ではありません。
+ 操作を文字列で実行している場合は、追加 (連結) として機能します。
したがって、最初のケースでは1+2+"3"
... 1+2 =3
しかし、3+"3"
Java concate 3を実行すると、33である文字列3になります。
2 番目の例で"1"+2+3
は ... 2 が文字列 "1" に追加され12
、"12" + 3
結果は = になり123
ます。
左の部分が(concatenation)である文字列に対して操作をString
呼び出しますが、数値では合計です+
append
+
右結合です。"1"+2
結果は"12"
になり、追加すると3
が得られ"123"
ます。
評価は左から右に行われます。文字列が最初に満たされると、後続のすべての値が式に追加される前に暗黙的に文字列にキャストされます。したがって、最初のケースでは1 + 2 = 3であり、文字列が満たされ、文字列「3」に2が追加されます。2番目のケース-文字列「1」が満たされ、各intが文字列にキャストされてから、これまでに蓄積された結果に追加されます。
文字列に何か足すと文字列になるので、1+"2"(文字列)は"12"(文字列)になります。文字列に追加し続けると、文字列 "12"(文字列) + 33 は "1233"(文字列) になります。これはあなたの質問をより正当化すると思います。
ありがとう
カピル・ガーグ
まあ、通常、数式は右からスキャンされます。
最初のケースでは、右からスキャンすると、2 つの int オペランド ( 1と2 ) が取得され、それが追加され、さらに進むと int として3になり、1 つのオペランド ( "3" ) が文字列であるため、連結されます。それは33になります。
2 番目のケースでは、右からスキャンして 1 つの文字列オペランド ( "1" ) を取得し、それを2と連結して、文字列として12になるようにすると、次に進むと int( 2 ) が見つかりますが、今回は最初のオペランド ( 12 ) は文字列なので、再度連結すると123になります。
最初のケースでは 1+2+"3" 最初の 1+2 が追加され、文字列が追加されるため、出力は 33 になります。
ただし、2 番目のケースでは、最初の文字列 "1"+2+3 に 2 が追加されるため、"1"+2 の操作は文字列になり、自動的に最後の文字列 ("12"+3) も文字列になります。
つまり: 最初のケース: 数値出力 + 文字列 = 文字列
2 番目のケース: 文字列 + 数値 = 文字列
つまり、下位/ラッパーのデータ型を持つ親クラスにキャストされ、最終的な出力は親クラスになります。