文字列部分はString[6]です:
["231"、 "CA-California"、 "Sacramento-155328"、 "aleee"、 "Customer Service Clerk"、 "Alegra Keith.doc.txt"]
しかし、私が比較するparts[0]
と"231"
:
"231" == parts[0]
上記の結果は誤りです、
私は混乱しているので、誰かが理由を教えてもらえますか?
演算子は==
、sの値ではなく、オブジェクト参照を比較しますString
。
String
sの値を比較するには、次のString.equals
方法を使用します。
"231".equals(parts[0]);
これは、Javaの他のオブジェクトにも当てはまります。値を比較するときは、演算子equals
を使用するのではなく、常にメソッドを使用してください。==
このequals
メソッドはの一部でありObject
、何らかの方法で比較されるクラスによってオーバーライドされる必要があります。
文字列がインターンされていない場合、==は参照IDをチェックします。使用する:
"231".equals(parts[0]);
代わりは。
==
Javaでは、オブジェクトのアドレス(この場合は文字列)を比較します。
あなたが欲しいのはparts[0].equals("231")
equalsメソッドを使用します:parts [0] .equals( "231")。==演算子はオブジェクト参照を比較します。
答えは非常に簡単です。==演算子を使用して文字列を比較する場合、2つの異なる変数が単一のStringオブジェクトを参照しているかどうかを実際に比較します。そして、そうではありません。配列内の文字列と新しく作成された「231」は、同じ内容の異なるStringオブジェクトです。
正しいことは、次の式を使用することです:"231".equals(parts[0])
または"231".equalsIgnoreCase(parts[0])
。これにより、必要なものが得られ、これらのStringオブジェクトに同じ値が含まれている場合はtrueが返されます。
また、 compareTo(String)メソッドを使用することもできます。
String str = "test";
if( str.compareTo("test") == 0)
//the argument string is equal to str;
else
//the argument string is not equal to str;
これは本当にいい例です。文字列を使用した「==」演算子は、Java では非常に扱いにくい場合があります。
class Foo {
public static void main(String[] args) {
String a = "hello";
String b = "hello";
String c = "h";
c = c + "ello";
String operator = null;
if(a == b) {
operator = " == ";
} else {
operator = " != ";
}
System.out.println(a + operator + b);
if(a == c) {
operator = " == ";
} else {
operator = " != ";
}
System.out.println(a + operator + c);
if(a == "hello") {
operator = " == ";
} else {
operator = " != ";
}
System.out.println(a + operator + "hello");
if(c == "hello") {
operator = " == ";
} else {
operator = " != ";
}
System.out.println(c + operator + "hello");
}
}
次の出力が生成されます。
hello == hello
hello != hello
hello == hello
hello != hello
equals メソッドを使用してオブジェクトを比較します。
String[] test = {"231", "CA-California", "Sacramento-155328", "aleee",
"Customer Service Clerk", "Alegra Keith.doc.txt"};
System.out.println("231".equals(test[0]));
比較「==」は、値ではなく参照を比較します。
他の多くの人がすでに説明しているように、等値演算子と比較しようとしますが、String.equals() ではなく Object.equals() に依存します。
したがって、明示的に String.equals() を呼び出すことでジョブを実行できますが、書く代わりに
parts[0].equals("blahblah")
私はそのようなことを好むでしょう:
"blahblah".equals(parts[0])
parts[0] の潜在的な null のテストを回避するため (ただし、parts 変数自体が null になる可能性があることに注意してください...)
もう 1 つの方法は、 String.intern() を使用することです。
if (parts[0].intern() == "blahblah") ...
詳細については、 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#intern()を参照してください。