JAvaでの比較

7495 ワード

今日、牛客のネット上で簡単な問題を書いて、耻ずかしくて間違っていました.タイトルは以下の通りです.
public class Demo {
  public static void main(String args[])
  {
    String str=new String("hello");
    if(str=="hello")
    {
      System.out.println("true");
    }      
    else     {
      System.out.println("false");
    }
  }
}

問:出力された結果は?答え:falseこれは簡単な問題で、引用変数strの値と文字列定数helloが等しいかどうかを比較して、結果的に頭が大きくなります.だからメモを書いてjavaの中の**を勉強します **
1. “==” ==演算子は、6つの関係演算子(==!=><>=<=)のうちの1つである.2つの変数の値が等しいかどうかを比較する役割を果たします(もちろん、変数の値と定数が等しいかどうかを比較することもできます).両方の変数が基本データ型である場合、==を使用して変数の値が等しいかどうかを直接比較できます.両方の変数が参照タイプ変数である場合、参照タイプ変数の値が参照対象オブジェクトのスタックメモリ内のアドレスであるため、==は、両方の参照タイプ変数が同じオブジェクトを指しているかどうかを比較する.
2. equals
equalsは、各javaクラスがObjectクラスから継承されるため、各オブジェクトにequalsメソッドがあるObjectクラスが提供するメソッドの1つです.Objectクラスにおけるequalsの定義は次のとおりです.
    public boolean equals(Object obj) {
        return (this == obj);
    }

従って、equals(Object obj)メソッドを書き換えない場合、equals(Object obj)は==と一致する.
ps:Objectオブジェクトはjava.langパッケージの下にはrt.jarで見つけることができます.
2つの参照変数が指すオブジェクトの内容が同じかどうかを比較するには、equalsメソッドを書き換える必要があります.次に、Stringクラスの書き換えのequalsメソッドを示します.
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

最初の3行は、比較するオブジェクトとスタックメモリ内のアドレスが同じ場合、両方のオブジェクトの内容は必ず等しいことを示します.4行目:比較対象が文字列であるかどうかを判断し、そうでない場合は比較可能性がなくfalseに直接戻ります.7行目:2つの文字列の長さが一致しているかどうかを判断し、一致していない場合はfalse.一致する場合は、文字ごとに比較します.