45

文字列部分はString[6]です:

["231"、 "CA-California"、 "Sacramento-155328"、 "aleee"、 "Customer Service Clerk"、 "Alegra Keith.doc.txt"]

しかし、私が比較するparts[0]"231"

"231" == parts[0]

上記の結果は誤りです、

私は混乱しているので、誰かが理由を教えてもらえますか?

4

12 に答える 12

78

演算子は==、sの値ではなく、オブジェクト参照を比較しますString

Stringsの値を比較するには、次のString.equals方法を使用します。

"231".equals(parts[0]);

これは、Javaの他のオブジェクトにも当てはまります。値を比較するときは、演算子equalsを使用するのではなく、常にメソッドを使用してください。==

このequalsメソッドはの一部でありObject、何らかの方法で比較されるクラスによってオーバーライドされる必要があります。

于 2009-06-15T12:50:02.037 に答える
15

文字列がインターンされていない場合、==は参照IDをチェックします。使用する:

 "231".equals(parts[0]);

代わりは。

于 2009-06-15T12:50:15.717 に答える
13

==Javaでは、オブジェクトのアドレス(この場合は文字列)を比較します。

あなたが欲しいのはparts[0].equals("231")

于 2009-06-15T12:49:58.603 に答える
7

equalsメソッドを使用します:parts [0] .equals( "231")。==演算子はオブジェクト参照を比較します。

于 2009-06-15T12:50:03.363 に答える
5

"=="はオブジェクト参照を比較します。あなたの場合、"231"はparts[0]とは異なるオブジェクトです。

String.equalsを使用します。

parts[0].equals("231")
于 2009-06-15T12:50:41.893 に答える
4

答えは非常に簡単です。==演算子を使用して文字列を比較する場合、2つの異なる変数が単一のStringオブジェクトを参照しているかどうかを実際に比較します。そして、そうではありません。配列内の文字列と新しく作成された「231」は、同じ内容の異なるStringオブジェクトです。

正しいことは、次の式を使用することです:"231".equals(parts[0])または"231".equalsIgnoreCase(parts[0])。これにより、必要なものが得られ、これらのStringオブジェクトに同じ値が含まれている場合はtrueが返されます。

于 2009-06-15T12:55:48.870 に答える
2

また、 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;
于 2010-01-09T21:28:07.167 に答える
1

これは本当にいい例です。文字列を使用した「==」演算子は、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
于 2010-01-09T21:19:05.820 に答える
1

equals メソッドを使用してオブジェクトを比較します。

String[] test = {"231", "CA-California", "Sacramento-155328", "aleee",
                 "Customer Service Clerk", "Alegra Keith.doc.txt"};

System.out.println("231".equals(test[0]));

比較「==」は、値ではなく参照を比較します。

于 2009-06-15T12:57:14.173 に答える
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()を参照してください。

于 2009-06-15T19:03:26.047 に答える