2011-11-09 9 views
2

次のJavaで最も簡単なコードスニペットを見てみましょう。ブール値に評価される式は、JavaではStringと連結できません。どうして?

final public class Parsing 
{ 
    public static void main(String[] args) 
    { 
     int p=10; 
     int q=10; 

     System.out.println(p==q); 
    } 
} 

Javaで上記のコードは正常であり、同じ値(10)を含む、同じタイプ(INT)のpおよびqの両方としてを表示します。今、println()の引数を連結して、新しい行エスケープシーケンス\ nを含むようにし、その結果を次のように新しい行に表示します。

表現 pは== Qは、Javaのboolean値とboolean型を評価(ブール、ラッパー型ではない)で利用可能な任意の他のタイプに変換することはできませんので、全く許されない
System.out.println("\n"+p==q); 

Java。したがって、上記の文は無効であり、コンパイル時にエラーが発生します。 Javaでこのような状況を回避する方法は何ですか?


驚くべきことに、次の文はJavaで完全に有効です。

System.out.println("\n"+true); 
System.out.println("\n"+false); 

となり、それぞれ真と偽を表示します。どうやって?なぜ文の中の同じものは許可されていませんSystem.out.println("\n"+p==q);

答えて

11

p == qの前後にカッコ()を追加する必要があります(書き方、( "\ n" + p)== q、Stringはブール値と比較することはできません)。この演算子の優先順位は、だから、

System.out.println("\n"+(p==q)); 

だけで正常に動作する必要があります

if(a+b == c+d) 

などのような表現のために望まれています。

"\n" + (p == q) 
+1

これは役に立つかもしれません[オペレータの優先順位](http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) –

+1

愚かな間違いです。 – Lion

2

演算子の優先順位は、あなたの表現は、試す

("\n" + p) == q 

コンパイルが失敗したので、int型に文字列を比較することが無意味であると評価されることを意味します。ステートメントは間違っています。

System.out.println("\n"+(p==q)); 

〜Dheeraj

1

ああ:

+1

これは間違っていますか?どういう意味ですか? – Lion

2

のSystem.out。println( "\ n" + p == q);

コンパイラは

System.out.println(("\n"+p)==q); 

使用

式pので== qはJavaでブール値とboolean型を評価し、全く許されない
System.out.println("\n"+(p==q)); 
2

として扱います(ブールではなく、ラッパー型)は、Javaで使用可能な他の型に決して変換することはできません。

これは完全に間違っています。何かをStringに連結することは、ブール値を受け入れるためにオーバーロードされるString.valueOf()によってコンパイラによって実装されます。

コンパイラエラーの理由は+がそうあなたのコードは

System.out.println(("\n"+p)==q); 

と同等であり、あなたはと比較されるStringintを持っているため、エラーが発生し、==よりも高い演算子の優先順位を持っているということだけです一方==

、これは意図したのと同様に動作します

System.out.println("\n"+(p==q));