2013-04-06 5 views
-3

공용 클래스 TestDoubleEqualString {자바 문자열 비교

/** 
* @param args 
*/ 
public static void main(String[] args) { 


    String s1=new String("abc"); 
    String s2=new String("abc"); 


    System.out.println(s1.hashCode()); 
    System.out.println(s2.hashCode()); 



    System.out.println(s1==s2); 

    System.out.println(s1.equals(s2)); 


} 

}

// 안녕 내 s1.hashcode()와 s2.hashCode()는 같은 값을 반환하고 있지만, 왜 (S1) ==도 t하지만 다른 문자열 참조를 비교하기 때문에 == S2는 .....

+4

오늘 뭔가 이상한 일이 있습니다. 모두가이 질문을 복제하고 있습니다. – Maroun

+0

많은 사람들이 질문을 마킹하여 총을 들고 점프하고 있습니다. 예를 들어, 내 s1.hashcode()와 s2.hashCode()가 같은 값을 반환하더라도 간단한 =='-='-vs-'equals()': *보다 오해가 많이 있습니다. .. * 좋은 설명을 위해 * – NPE

답변

1

s1 == s2이 거짓 사전에

감사 거짓 그는 두 줄의 내용이 같습니다. 문자열 내용을 확인하려면 s1.equals(s2)을 사용하십시오. 내 s1.hashcode()s2.hashCode() 비록

s1==s2

==의 사용 거짓 왜, 같은 값을 반환하는이 논리는 완전히 결함이있다. 2 개의 캐릭터 라인이 같은 해시 코드를 가지는 경우, 동일한 캐릭터 시퀀스 (실제로는 같은 오브젝트)로 구성되어 있는지 어떤지를 판정하는 것은 불가능합니다.

+0

+1 – Maroun

1

NPE가 이미 대답했지만 명확히하기 위해 - 문자열은 객체입니다. ==는 'this is same object'입니다. 반면에 .equals 메소드 문자열 객체의 텍스트는 객체 내부의 텍스트를 비교합니다. .