2012-04-20 2 views
1

가능한 중복 :
Java String.equals versus ==문자열 겉으로는 동일하지 사용하여 문자열()

내가 너무 일을 쉽게 기대하지 않습니다 자바에 새로운 오전하지만 나를 완전히 충격 쉘이 . 지구에 이유는하지 않습니다 문이 제대로 평가되는 경우 :

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

==은 값이 아닌 참조로 객체를 비교합니다.

동일한 값을 포함하는 두 개의 다른 문자열 개체가 있으므로 ==은 false를 반환합니다.

.equals()으로 전화해야합니다.

+0

이 스레드를 찾은 나 같은 초보자를위한 구문은 입니다. string2.equals ("abcd") – Gimli

8

실제 참조를 비교하지 않는 한 비교를 위해 ==== (까지)으로 사용하지 마십시오. .equals() 방법을 사용해야합니다. 그리고 String의 경우 을 작성하는 것이 좋습니다. myStr은 잠재적으로 null 일 수 있기 때문입니다.

Java 문자열에서 interned==은 때로는 정확한 결과를 제공 할 수 있지만 꼭 그렇게 사용해야한다는 것을 유의하십시오.

+0

놀랍도록 빠른 응답. 감사. 이 (가) 이와 같은 언어입니까? 왜 그들은 그냥 작동시키지 못하니? = – Gimli

+1

@Gimli : 아니요 C#과 C++은 연산자 오버로딩을 지원하고 Javascript는 문자열을 특별히 처리합니다. – SLaks