• ベストアンサー

この文法は正しいんでしょうか?また、それは何故ですか?

String line; String a; if(line.equals(a)) {実行文} というような条件式です。 普通equalsメソッドはboolean型でtureかfalseを 返すということらしいんですが、 この条件式では、どうやら これで「lineがaと等しいとき、実行文処理へ進む」ということが可能になるらしいです。 普通に考えれば 事前にboolean b=line.equals(a); if b==true{実行文} という形になると思うんですが、 何故文法的にOKなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

Javaに限らずCでも他の言語でも同じですが ifは条件式を評価してtrueなら実行文を実行します if(line.equals(a))の場合はline.equals(a)を評価してtrueなら実行文をfalseなら次の処理となります。 if(line.equals(a)) {実行文} と if(line.equals(a) == true) {実行文} は結局同じ意味になります。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.4

理由は他の方が説明していらっしゃるのでいいと思います。 こんなこともできます。 if(true){ } if文では無意味ですが、 while(true){ } とすれば無限ループを作れます。 これは、個人的によく使っています。

kasyle
質問者

お礼

みなさんありがとうございました。解決できました

すると、全ての回答が全文表示されます。
noname#18558
noname#18558
回答No.3

プログラム習いたてのころは、不思議に思ったものです。 でも、分かってしまえば常識なことなんですよね。 if文の評価はbooleanである必要があります。 String#equalsの戻り値はbooleanであるから正しいです。 また、 b==true という評価の結果もbooleanです。 boolean b1 = line.equals(a); boolean b2 = line.equals(a) == true; boolean b2 = ( line.equals(a) == true ) == true; いずれも、結果は同じになります。 この文法が理解できれば、納得いくでしょう。

すると、全ての回答が全文表示されます。
回答No.2

if文は条件式の返す値がtrueかfalseかを判断するだけです。ですから「line.equals(a)」がtrueを返していたらtrueと判断します。 javaの場合、boolean型を返す式ならば文法的に問題ありません。

すると、全ての回答が全文表示されます。

関連するQ&A