18

これらの場合に出力が異なるのはなぜですか?

int x=20,y=10;

System.out.println("printing: " + x + y); ==> 印刷: 2010

System.out.println("printing: " + x * y); ==> 印刷: 200

最初の出力が 30 でないのはなぜですか? 演算子の優先順位に関連していますか? 最初の「印刷」と x が連結され、次にこの結果の文字列と y が連結されるように? 私は正しいですか?

4

7 に答える 7

8

基本的な数学は、数値の加算が一度に行われることを示しています。

So"printing: " + xが最初に計算されます。そのままstring + int結果は"printing: 20"です。y次に、 so "printing: 20" + yequalsを追加します"printing: 2010"

2 番目のケースでは、乗算が優先されます。したがって、最初x * yに計算され、等しいです200。に"printing: " + 200等しい。"printing: 200"

于 2012-08-19T18:13:23.180 に答える
4

観察した結果は、確かに演算子の優先順位評価の順序に関連しています。別のルールがない場合、つまり優先順位の高い演算子がない場合、演算子は左から右の順に評価されます。

最初の式では、すべての演算子は同じ operator:+であるため、同じ優先順位を持ち、最初の操作が評価されます。が含まれているためStringString連結であり、結果はString; です。以下も同様+

2 番目の式では、演算子の 1 つが であり、*よりも優先順位が高い+ため、最初に評価されます。乗算の結果、整数、およびよるaStringと anの連結が得られます。int+

于 2012-08-19T18:14:00.500 に答える
1

これは印刷されます30

System.out.println("printing: " + (x + y))

希望する優先順位を表すには括弧が必要です。

于 2012-08-19T18:11:02.747 に答える
0

最初の印刷行では、最初に + 演算子が String と int の間に適用され、結果は String になり、別の int と再び連結されて String になります。

2 行目の操作の順序は次のとおりです。最初に乗算を行い、結果の int を文字列に連結します。

于 2012-08-19T18:14:19.233 に答える