2016-10-13 6 views
0

私はJavaを初めて使用しています。下のループを処理しているときに、ループのカウンタ値が1ずつ増加していることを示したいと思います。以下のコードを保持すると、カウンタ値を1にして連結するような値が得られます。 System.out.printlnが追加の代わりに連結を使用しているのはなぜですか?加算演算子(+)加算の代わりに連結を実行

for (c = 0; c < Size; c++) { 
    System.out.println("here the problem " + c+1 + " Case"); 
} 
+0

'(C + 1)'、忘れドントparanthesis、そうでなければ最初の操作の後 ""ここで... "+ c ...'それ以外のものは 'String'連結として扱われます。 – SomeJavaGuy

+0

あなたが書いた式は '(("(ここで問題 "+ c)+ 1)+" Case ")'と等価です。これは左連想率と呼ばれます。 – ajb

答えて

2

+オペレータは、連結とadditonの両方のために、オーバーロード、および両方の演算子が同じ優先順位を持っているので、操作は、左から評価されています右に。

左から、最初に見つかったオペランドは文字列"here the problem"であるため、オペレータは連結を実行する必要があることを認識しています。その文字列にcを連結し、新しいStringを生成します。

したがって、2番目の+はその結果の文字列で動作しており、1であるため、連結を再度行います。

あなたは、具体的操作の順序を制御し、c + 1"here the problem" + c前に評価したいなら、あなたは括弧で運転を囲む必要があります。

"here the problem " + (c + 1) + " Case" 
1

常にそれがどのようにするSystem.out.println作品の問題ではない文字列の連結

0

前に、括弧内の式を評価しようと、このように、この

for (c = 0; c < Size; c++) { 
    System.out.println("here the problem " + (c+1) + " Case"); 
} 

を試してみてください。 Javaはステートメントを連結として扱います。 あなたは文字列に+を使用する場合、他の変数は、連結に実行される文字列とJavaとして扱われますので

関連する問題