2011-12-07 3 views
2

의 JLabel과 JTextField를 문자열 비교는

private JLabel someJLabel = new JLabel("some text"); 
... 
System.out.println (someJLabel.getText() == "some text"); // returns true 

를 잘 작동하지만 JTextField를

private JTextField someJTextField = new JTextField("some text"); 
... 
System.out.println (someJTextField.getText() == "some text"); // returns false 

사용할 때 나는 someJTextField.getText().equals("some text"); 사용하는 경우는 잘 작동한다고 알고있다.

그래서 왜 JLabel의 작동하지만, JTextField를하지

편집 : 그래 내가 문자열 .equals를 사용하는 것을 알고,이 글 http://javatechniques.com/blog/string-equality-and-interning/을 읽었지만 내가 사용하는 것으로 이미 알려져있다 "텍스트"그것 때문에 동일한 문자열 개체를 참조 할 수 있습니다.

답변

1

JTextField는 문자열을 수정 가능한 문서 객체로 내부적으로 복사하여 편집을 지원하므로 getText()에서 동일한 문자열을 반환하지 않습니다.

+0

JLabel에서 setText (t)는 this.text = t와 같습니다. JTextField에서는 this.getDocument()와 같습니다. insertText (t); 그래서 t는 보존되지 않습니다. jdk의 소스에서 이러한 클래스의 setText() 메소드 구현을 살펴보면 더 명확 해집니다. –

3

JTextField 및 JLabel과 관련이 없습니다.

JVM은 문자열 풀을 내부적으로 사용하며 다른 문자열 ("some text")이 풀의 동일한 문자열을 가리키기 때문에 == 연산자가 작동하는 경우가 있습니다. Look at question here

문자열을 == !!!

+1

레이블에는 내부에 모델 (데이터)이있는 단순한 문자열이 있기는하지만 JTextField에는 문서가 있기 때문에 추측 할 수 있습니다. 따라서 JTextField ("some text")를 생성하면 "some text"가 내부 문서 표현 (char 배열 또는 이와 비슷한 형태 일 수 있습니다.)으로 변환되고 someJTextField.getText()를 호출하면 new String (char []) 생성자 - 문자열 식별이 원래와 다릅니다 (힙의 다른 위치를 가리 킵니다) – korifey

0

.equals(Object obj)

==는 대부분 단지 기본 개체와 함께 사용해야와 문자열 비교.

0

== 연산자 및.equals 메소드에는 약간의 차이가 있습니다. == 연산자는 두 개체를 비교하는 반면 .equals 메서드는 두 개체의 값을 비교합니다.

두 경우 모두 동일한 값을 가질 수 있지만 두 개의 다른 개체를 비교할 수 있습니다. 귀하의 경우에는 .equals 메서드를 사용할 수 있습니다. 이것은 확실히 도움이 될 것입니다!

관련 문제