2

プラス演算子の優先順位は、Java チュートリアルの優先順位表に 1 回だけ記載されています。ただし、次の Java 式:

String unexpected = "1 + 1 = " + 1 + 1; 
String expected   = "1 + 1 = " + (1 + 1);
System.out.println(unexpected);
System.out.println(expected);

次の出力が得られます。

1 + 1 = 11
1 + 1 = 2

これは、文字列を連結するためにプラス演算子を使用すると優先順位が高くなることを意味するのでしょうか、それともプラス演算子の優先順位は文字列と数値で変わらず、単純に左から右に評価されることを意味するのでしょうか?

4

4 に答える 4

8

左から右に評価されることを意味します。

于 2013-11-15T07:46:12.407 に答える
2

jls SE8 15.18.1 から。文字列連結演算子 +:演算子は、型分析によって文字列連結または数値加算を表すと判断されたかどうかに関係なく、+ 構文的 に左結合です。場合によっては、望ましい結果を得るために注意が必要です。たとえば、式:

a + b + c

は常に次の意味と見なされます。(a + b) + c

したがって、式: の結果は次のようになります1 + 2 + " fiddlers"
"3 fiddlers"

しかし、: の結果"fiddlers " + 1 + 2
は:"fiddlers 12"

別の例:1 + 1 + "" + 1 + 1
は次のようになります:211

そのため、コンテキスト"1 + 1 = " + 1 + 1;
は文字列になります1 + 1 = 11

しかし、"1 + 1 = " + (1 + 1);結果として1 + 1 = 2

于 2013-11-15T07:58:25.043 に答える
1

+常に左から右に流れる

最初の例String unexpected = "1 + 1 = " + 1 + 1;では、文字列が最初に来て、次に int 値が来るので、1 は文字列として扱われます。

2 番目の例では、どちらが + 演算子よりも優先されているString expected = "1 + 1 = " + (1 + 1);かを使用しています。( BODMAS )()

別の例を考えてみましょう:

String unexpected1 =1+1+ "1 + 1 = " ;
 System.out.println(unexpected1);

出力は21 + 1 =

ここでは int 値が最初に来るので 1+1 =2 で、次に文字列リテラルなので 2 は 1+1= で連結されます

于 2013-11-15T07:59:19.117 に答える
0

文字列で + を使用すると、合計ではなく連結がトリガーされます。
ただし、(1+1) を使用し、+ を使用して "1+1=" に合計すると、括弧内の式が最初に評価され、次に残りの文字列に連結されます。括弧内の評価は文字列とは独立して機能するため、1 と 1 は互いに加算された 2 つの整数と見なされます。

同じ演算子を使用すると、すべてが左から右に評価されます。ここで見つけることができる演算子の評価順序があります

于 2013-11-15T07:52:43.470 に答える