• ベストアンサー

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

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

  • Java
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • javaプログラムについて

    mainメソッド内の指定された部分の処理を、 別のメソッドに分けてください。 mainメソッド内から作成した別メソッドを呼び出して 実行できるようにしてください。 ※分ける前と分けた後で処理結果が変わらないこと (入力された文字が"A"の場合true, それ以外の場合falseを返すように) */ class MethodAdd1{ public static void main(String[] args){ /* // ★ここから if("A".equals(args[0])){ judge = true; }else{ judge = false; } // ★ここまで */ boolean judge; if("A".equals(args[0])){ System.out.println("true"); }else{ System.out.println("false"); } } /* **戻り値:boolean **引数:String */ //ここにメソッドを作成 public static boolean equals(String a){ String str="A"; if("A".equals(str)){ return true; }else{ return false; } } } これで一応trueかfalseと表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。

  • 環境でeval()が利用できません

    3×3の簡易エクセルをjavaで作っているところです。 各セルにキーボードから入力された数値を表示するところまではできました。しかし、Data: と表示するところで、A1+A2などを入力すると、 エラーが出ます。 Row:A Line:1 Data:2 Row:A Line:2 Data:4 と入力しているとき Row:A Line:3 Data:A1+A2 と入力された際、 2 4 6 と表示させたいです。どう改良すればいいでしょうか? for(roop=0;roop<=8;roop++) { System.out.print("Row:"); try { Row_before = br.readLine(); } catch(IOException e) { System.err.println(e); } if(Row_before.equals("A")||Row_before.equals("B")||Row_before.equals("C")) { Row[roop] = Row_before;Row_before=""; } else {Row_before="";} System.out.print("Line:"); try { Line_before = br.readLine(); } catch(IOException e) { System.err.println(e); } if(Line_before.equals("1")||Line_before.equals("2")||Line_before.equals("3")) {Line[roop] = Line_before;Line_before="";} else {Line_before="";} System.out.println("Data:"); //A1に数値を入力 if(Row[roop].equals("A")&&Line[roop].equals("1")) { try { A1_string = br.readLine(); } catch(IOException e) { System.err.println(e); } A1 = Integer.parseInt(A1_string); System.out.println(""+A1_string); } //以下同様の動き if(Row[roop].equals("A")&&Line[roop].equals("2")) {try{A2_string = br.readLine();}catch(IOException e){System.err.println(e);}A2 = Integer.parseInt(A2_string);} if(Row[roop].equals("A")&&Line[roop].equals("3")) {try{A3_string = br.readLine();}catch(IOException e){System.err.println(e);}A3 = Integer.parseInt(A3_string);} if(Row[roop].equals("B")&&Line[roop].equals("1")) {try{B1_string = br.readLine();}catch(IOException e){System.err.println(e);}B1 = Integer.parseInt(B1_string);} if(Row[roop].equals("B")&&Line[roop].equals("2")) {try{B2_string = br.readLine();}catch(IOException e){System.err.println(e);}B2 = Integer.parseInt(B2_string);} if(Row[roop].equals("B")&&Line[roop].equals("3")) {try{B3_string = br.readLine();}catch(IOException e){System.err.println(e);}B3 = Integer.parseInt(B3_string);} if(Row[roop].equals("C")&&Line[roop].equals("1")) {try{C1_string = br.readLine();}catch(IOException e){System.err.println(e);}C1 = Integer.parseInt(C1_string);} if(Row[roop].equals("C")&&Line[roop].equals("2")) {try{C2_string = br.readLine();}catch(IOException e){System.err.println(e);}C2 = Integer.parseInt(C2_string);} if(Row[roop].equals("C")&&Line[roop].equals("3")) {try{C3_string = br.readLine();}catch(IOException e){System.err.println(e);}C3 = Integer.parseInt(C3_string);} System.out.println(""); }

  • 条件式の書き方

    String key=rq.getParameter("shoukou");  if(key.equals("Aセット")){   out.println("選択:Aセット");  }else{   out.println("選択:Bセット");  } (上記ソースは抜粋) ラジオボタンでAセットがBセットを選び、その結果を表示するのですが、 この式を実行するとkeyの値に関わらず出力結果がBセットになってしまいます。 最初の条件文の書き方が違うのでしょうか・・・? どう書けばいいのか教えてください。

  • equalsと==について

    今まで、equalsは主に文字列の比較、==はプリミティブ型の比較と言うことで仕事で使っておりました。 しかし、文字列も==が使えることがわかりました。 String a = "aaa"; String b = "aaa"; という変数がある場合、今までは if(a.equals(b))とやっておりました。(と教わりました) が、if(a==b)でも同一の結果が得られることがわかりました。 実際、Stringクラスのソースを見ると、最初に==かどうかをif文を使って判定してます。 具体的にどう違うのか、ご存知の方教えてください。 また、どちらが良いのかも教えてください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • &と|の演算子を使ったif文のプログラムについて

    ↓のプログラムの実行結果について質問します。 public class Test{ public static void main(String args[]){ if(methodA() & methodB() ){ System.out.print(1); }else{ System.out.print(2); } if(methodA() | methodB() ){ System.out.print(3); }else{ System.out.print(4); } } private static boolean methodA(){ System.out.print("A"); return false; } private static boolean methodB(){ System.out.print("B"); return true; } } 上記のプログラムを実行すると AB2AB3 と出力されるのですが、 何故こういう風になるのか教えていただけませんか? また、if文の中をそれぞれ if(methodA() & methodB() ) if(methodA() | methodB() ) と書き換えると A2A3 となるのですが、これについてもイマイチよく分かりません。 メソッドからfalseとtrueを戻り値として受け取り 演算子によって処理を分けているんでしょうけど、 どういう流れで処理が行われているのか 出力結果を見ても読めなくて・・・

    • ベストアンサー
    • Java
  • メソッドが値を返すとき

    ”メソッドが値を返さない”というエラーで困っています。 次のようなプログラムでは、メソッドが値を返せないのは当たり前なのでしょうか?? public int A(){ int a= 3; int b= 5; if(条件式){ return (Math.sin(a*x)); }else if(条件式){ return (Math.cos(b*x)); }else if(条件式){ return 式 ; } } 「return」をif文のなかに入れてしまうことが,いけないのでしょうか? また,それがしてはいけない事ならば,条件式によって扱うreturn文を変えるには, どうしたら良いかアドバイスを下さい。 よろしくお願いします。

    • ベストアンサー
    • Java
  • エクセル if以外の関数で判別したいです。

    Excelで関数を利用して、判別したいです。 できればIF関数を使用せずに判別したいです。 AとBが等しくかつA(B)よりCが大きいかどうかを判別したいです。 [100][100][200][ture] [300][200[500][false] [400[300[100[ture] [200[200][100][false]

  • return文について質問

    以下は、あるJavaの参考書の問題を僕が解いてソースコードに起こしたものです。その際のエラーが出てしまうことについて、その原因を質問させていただきます。 package 第16章; public class 練習16_4_4 { public static void main(String[]arg){ double[]dt={55.1,23.0,168.8,25.6,33.1,101.5}; System.out.println(isOver100(dt)); } public static boolean isOver100(double[]a){ for(double x:a){ if(x>100.0){ return true; }else{ return false; } } } } 質問:『public static boolean isOver100(double[]a){』、ここの部分でエラーとして「このメソッドは型booleanの結果を戻す必要があります」と表示されます。何故ですか?だって、return文で型booleanであるtrueやfalse返してるのに、、 まったく原因わかりません。

    • ベストアンサー
    • Java
  • for文

    質問お願い致します。 これのソースのfor文を一つの文にするにはどのように書いたらよいでしょうか? お願い致します。 //指定された文字列が"a"と"b"の両方を含む場合はtrue、なければfalseを返す public class Mondai { public static void main(String[] args) { System.out.println("解答 :" + charBothContain("Habllow")); } public static boolean charBothContain(String str) { boolean answer1 = false; boolean answer2 = false; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'a') { answer1 = true; break; } } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'b') { answer2 = true; break; } } return answer1 && answer2; } }

    • ベストアンサー
    • Java
  • ifの条件式で文字列を使う場合

    例えば、 String str = "条件";//こういう場合に、 if(str == "条件")//これはだめだけど、 if(str.equals("条件"))//これはいい となると思います。 何となく、上の式でも通じそうなのですが、なぜ動かないのでしょうか? 「そういうもん」と思うべきことなのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう