2012-04-20 14 views
1

可能性の重複:
Java String.equals versus ==文字列一見等価ではない使用して、サブストリング()

私は物事が簡単であることを期待していないのJavaに新しいですが、これは私は完全にショックを受けシェルあり。 はなぜ地球上の文が正しく評価されない場合:

import javax.swing.JFrame; 
import javax.swing.JTextArea; 

public class StringMystery extends JFrame { 

    JTextArea txt = new JTextArea(); 
    String string1 = "abcde"; 
    String string2 = string1.substring(0,4); 

    public StringMystery() { 

     setLayout(null); 

     txt.setBounds(20, 20, 100, 100); 
     add(txt); 

     txt.setText(string2); 

     //string 2 is definitely equal to "abcd" but this doesn't evaluate: 
     if (string2 == "abcd"){  
      txt.setText("string2 = abcd");   
     } 

    } 


    public static void main(String[] args) { 

     StringMystery jtxt = new StringMystery(); 
     jtxt.setSize(200,200); 
     jtxt.setTitle("String Mystery"); 

     jtxt.setVisible(true); 

    } 
} 
+1

このスレッドを見つけた私のような初心者のために、他の百万の文字列==質問 – Qwerky

答えて

6

==は、参照することにより、値ではなくオブジェクトを比較します。

同じ値を含む2つの異なる文字列オブジェクトがあるため、==はfalseを返します。

.equals()に電話する必要があります。

+0

の重複は string2.equals( "abcd") – Gimli

8

==)は、実際の参照を比較しない限り、比較のために使用しないでください。 .equals()メソッドを使用する必要があります。 Stringについては、と書くことをお勧めします。myStrはnullとなる可能性があるからです。

Java文字列では、interned==が正しい結果を返すことがありますが、決してそれに頼るべきではありません。

+0

驚くほど速い応答です。ありがとう。 はすべてこのような言語ですか?どうして彼らはちょうど== – Gimli

+1

@Gimliで動作させることができないのですか?いいえ。C#とC++は演算子のオーバーロードをサポートしています.Javascriptは文字列を特別に扱います。 – SLaks

関連する問題