-3

文字列の解析に問題があります。文字列配列の値が本来あるべき値と等しくない理由がわかりません! これは奇妙に思えるかもしれませんので、コードの簡略化したバージョンを次に示します (アプリケーションははるかに大きいため、要点を説明するために小さなプログラムを作成しました)。

public class Test {

public static void main(String[] args) {

    String src = "beep zap derp flop";
    String delims = "[ ]+";
    String[] tokens = src.split(delims);

    if (tokens[0] == "beep") {
        System.out.println("you said beep!");
    } else {

               for (int i = 0; i < tokens.length; i++) {
                    System.err.println("'" + tokens[i] + "'");
               }
          }
     }
}

私の出力は

'beep'
'zap'
'derp'
'flop'

tokens[0] がビープ音であることは知っていますが、Java は気付いていないようです。私が間違っていることはありますか?

4

4 に答える 4

7

Java==の内容を比較するために演算子を使用しないでください。などStringsと一緒に使用すると、演算子は参照が等しいかどうかを比較します。言い換えると、両方の参照がまったく同じオブジェクトを参照している場合にのみ、オブジェクトに対して返されます。2 つの異なるオブジェクトがある場合は、内容が同じであっても返されます。ObjectsStrings====true String==false

String#equalsの内容を比較するために使用しStringsます。このメソッドは、Stringオブジェクトの内容を文字ごとに比較して、内容が同一かどうかを判断します。

于 2013-03-21T00:23:44.797 に答える
1

Javaでは、equalsメソッドを使用して2つの文字列を比較する必要があります。たとえば、と比較String aしたい場合String bは、と言うことができますif (a.equals(b))==演算子は、2つの文字列が同じオブジェクトへの参照であるかどうかを確認します。

于 2013-03-21T02:14:02.960 に答える
1

.equals文字列を比較するために使用する必要があります。

equalsメソッドは文字列の実際の内容をチェックし、==演算子は 2 つのオブジェクトが同じインスタンスを参照しているかどうかをチェックします。

String.equals(String other)

これを参照してください: http://blogs.adobe.com/cantrell/archives/2003/04/how_equals_work.html

于 2013-03-21T00:24:56.980 に答える
0

パブリッククラステスト{

public static void main(String[] args)    {
String src = "beep zap derp flop";
String delims = "[ ]+";
String[] tokens = src.split(delims);

if ("beep".equals(tokens[0]))
{
    System.out.println("you said beep!");
} 
else
{

           for (int i = 0; i < tokens.length; i++) {
                System.err.println("'" + tokens[i] + "'");
           }
      }

}

}

于 2013-03-21T05:41:47.677 に答える