問題
最近書かれた手順2つのStringオブジェクトが等しい比較する必要が発生した場合、私は習慣的に書いたような形をif(a == "a"){}
次のように声明、警告のうちIDEAは、読み取ります。
String values are compared using '==', not 'equals()'.
言い換えれば、私はちょうどその文がなければなりません書いてないif(a.equals("a")){}
魚、と彼女はもはや赤でマーク。
説明
なぜこれがそうですか?==
そしてequals()
、それぞれ、どのような影響?
基本データ型のbyte
(バイト)、 short
(短整数)、 int
(整数)、 long
(ロング)、 float
(単精度浮動小数点)、 double
(倍精度浮動小数点)、 boolean
(ブール)、 char
(キャラクタータイプ)、==
比較が全くありません、彼らの価値あるequals()
方法で。
以下のためにString
データ参照のこのタイプ、==
アドレス2つのオブジェクトである同じメモリアドレスへの参照の比較は、同じメモリアドレスならば、性質が同じオブジェクト間に何のように同じオブジェクトです。
私たちの一般的なシナリオは、それがイコールの使用()メソッドが必要になり、2つの文字列オブジェクトの内容を比較することが主な理由です。我々は()メソッドに等しいjava.lang.Stringの定義を見ることができ、あなたは)(値はイコールで2つのStringオブジェクトを比較することで見ることができます。
/**
* Compares this string to the specified object. The result is {@code
* true} if and only if the argument is not {@code null} and is a {@code
* String} object that represents the same sequence of characters as this
* object.
*
* @param anObject
* The object to compare this {@code String} against
*
* @return {@code true} if the given object represents a {@code String}
* equivalent to this string, {@code false} otherwise
*
* @see #compareTo(String)
* @see #equalsIgnoreCase(String)
*/
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;
}
以下のような状況の特殊なケースもある"abcde" == "abcde"
か"abcde" == "abc" + "de"
常に返されtrue
、両側が直接コンパイラによって実装されているので、それは変数として宣言されていませんが。
概要
あなたは何をしているかを知っていればもちろん、それは==この機能は、もちろん問題はないを使用することです。equalsと他の回は、()メソッドは、することができます。
AMW市I:共有するためのJava開発技術の研究や知識に焦点を当てます!
- - 終わり - -