24298


[Aizu Online
ジャッジの問題](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_4_C)を解いているのですが、以下のプログラムの間違っている箇所を教えてください。

`+-*/?`をString型のString cに代入して、`if(c=="+")`のように条件分岐させているのですが、うまくいっていないようです。

[code]

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class test{
      public static void main(String[] args){
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try{
          while(true){
            String str = reader.readLine();
    
            String[] str_Array = str.split(" ");
            int a = Integer.parseInt(str_Array[0]);
            int b = Integer.parseInt(str_Array[2]);
            String c = str_Array[1];
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
    
            if(c == "?") break;
            if(c == "+"){
              System.out.println(a+b);
            }else if(c == "-"){
              System.out.println(a-b);
            }else if(c == "/"){
              System.out.println(a/b);
            }else if(c == "*"){
              System.out.println(a*b);
            }
          }
          reader.close();
        }catch(IOException e){
          System.out.println("エラー:"+e);
        }
      }
    }
    
[/code]


CC BY-SA 3.0
2016-04-24T07:00:59.433
24297
2016-05-14T04:26:58.137
2016-04-27T12:11:18.343
2238
15279
question
java
Javaの文字列の比較について


文字列の比較には`==`ではなく、`equals()`を使いましょう。

[code]

    if(c.equals("?")) break;
    
[/code]

のような感じです。

`==` は、同じオブジェクトであるかどうかを判定するときに使います。一方、`equals()`
は、同じ値であるかどうかを判定するときに使います。`equals()`
の場合は、違うオブジェクトの比較であっても、保持している値が同じ場合は`true`を返します。

例えば、

[code]

    public class EqualsTest {
        public static void main(String[] args) {
            String s1 = "boo";
            String s2 = s1;
            System.out.println(s1==s2);         // true
            System.out.println(s1.equals(s2));  // true
    
            String s3 = new String(s1);
            System.out.println(s1==s3);         // false
            System.out.println(s1.equals(s3));  // true
        }
    }
    
[/code]

というコードでは、`s1`と`s2`は同じオブジェクトを指しているので`==`でも`equals()`でも`true`を返します。  
`s3`は、`s1`を元にして別のオブジェクトを新しく生成しています。つまり、値が同じ別のオブジェクトなので、`==`は`false`を、`equals()`は`true`を返します。


CC BY-SA 3.0
2016-04-24T07:55:05.073
24298
2016-04-24T07:55:05.073
3605
24297
answer