2017-06-10 12 views
1

2番目のケースでコンパイルエラーが発生し、5が文字列で4がintであることが示されます。これは最初のケースでも同じですが、出力が得られます。2番目のケースで文字列の連結が許可されないのはなぜですか?

class Test 
    { 
    public static void main(String args[]) 
    { 
    System.out.println("The sum is: "+5*4); //Gives output The sum is: 20 

    System.out.println("The sum is: "+5-4); 

    //Gives compilation error shows 5 is string while 4 is int.This should be the case with prevous case also but it gives output.Why???? 
    } 
    } 
+2

[演算子の優先順位](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) –

+1

あなたが5-4をinside()に入れればうまくいくでしょう。これは優先順位のために起こっています。 –

答えて

2

Javaは*+よりも強く結合することをoperator precedence状態のためのルールが、-はしていません。

これは、最初の式が"The sum is: " + (5 * 4)と同じであることを示します。これは、"The sum is: 20"と評価されます。ただし、2番目の式は("The sum is: " + 5) - 4と同じですが、意味がありません。Stringから数値を減算することはできません。

0
"The sum is: "+5*4 

+よりも高い優先湯順位を持っている*が含まれています。したがって、最初に5*4が評価されます。次に、連結によって暗黙的にintの結果がStringに変換されます。この場合


"The sum is: "+5-4 

、両方+-は同じも優先を有しています。したがって、式全体が左から右に評価されます。連結によって暗黙的に5Stringに変換されます。 Stringからintを引くことができないため、次の操作は失敗します。適切な評価を実施するには、かっこを使用します。

我々は最初の引き算をした場合、これが動作することに注意してください:

5-4+" is the sum" 
関連する問題