2016-03-31 9 views
0

を "等しい" 私はJavaでコードを書いたと2 equals 11 .MYコードとして出力を得た今、質問があるJavaの文字列の連結は、2通りの出力を与える連結1 + 1 +上11に等しいが、+ 1 + 1

public class StringPrct 
{ 
public static void main(String[]args) 
{ 
String s= 1+1+" equals "+1 +1; 
System.out.println(s); 
} 
} 

ですなぜ私は2 equals 2として出力されていません。

+0

あるべき文字列(2 equals 11

です。注意してください、彼らは重要です。 –

+0

スペースを取り除くこともできません。同じ出力が得られます。 –

答えて

6

+オペレータがsame precedence whether it's addition or concatenationを持ち、そして仲間は左から右へ。だから、:

1 + 1 + " equals " + (1 + 1) 

これは次のようになります:

((1 + 1) + " equals ") + (1 + 1) 
(2 + " equals ") + (1 + 1) 
"2 equals " + (1 + 1) 
"2 equals " + 2 
"2 equals 2" 

明確にするために

1 + 1 + " equals " + 1 + 1 

は、あなたがこれをオーバーライドする場合は、括弧を提供する必要が

(((1 + 1) + " equals ") + 1) + 1 
((2 + " equals ") + 1) + 1 
("2 equals " + 1) + 1 
"2 equals 1" + 1 
"2 equals 11" 

と評価します、あなたはおそらくtを追加すべきです2 + " equals "

(1 + 1) + " equals " + (1 + 1) 
1

数値を文字列に追加すると文字列が得られます。 1 + 1は2であり、intにintを追加すると2 + "equals"は文字列であり、後で連結されるだけです。

1

文字列の後に、Javaは他の連結された引数に、toString()が呼び出される必要があると考えているようです。あなたは括弧であなたの業務を置くことによって、Javaにオペレータの順序についてのヒントを与える場合は、正しい出力が得られます:

String s= (1+1) +" equals "+ (1 +1); 
5

1 + 1は整数(2)である

されています:彼はあなたのコードを読んで、誰かが括弧を追加し、ダウン評価の精神的な運動を行う必要がないように、同様に最初の1 + 1に括弧しますStringにキャスト(2 equals

"2 equals " + 1文字列(2 equals 1

でありますは、それはあなたが最後の二つのものの間にスペースを置くためです(1 + 1) + " equals " + (1 + 1)

関連する問題