2016-06-14 2 views
0

나는이 안드로이드 애플 리케이션에서 취할 조치의 과정을 결정하기 위해 버튼 텍스트를 비교하려고합니다. 내가 이해하지 못하는 예기치 않은 행동이 일어나고 있습니다.안드로이드의 텍스트 비교 버튼

clickMeButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (v.getId() == R.id.btnLeft) { 
       Button button = (Button) v; 
       String click = new String("Click me"); 
       String look = new String(button.getText().toString()); 
       Boolean check = new Boolean(look == click); 
       if (button.getText().toString() == "Click me") { 

변수 검사가 false를 반환합니다. 왜? 디버거에서 두 항목의 옆에 "Click me"가 표시됩니다. 에뮬레이터에서 클릭하는 버튼에는 "Click me"라고 쓰여 있고 원본 텍스트는 "Click me"가 XML로 지정되어 있습니다.

답변

5

Java에서 문자열 비교를 수행하는 방법이 아닙니다. equals() 체크 두 파라미터 값이 동일한 경우, 둘 중에 파라미터들이 동일한 개체 인 경우이

if (button.getText().toString().equals("Click me")) { 

== 체크 해보세요.

1

문자열 개체를 문자열 개체와 비교하면 괜찮습니다. 하지만 개체를 ​​char 배열과 비교하고 있습니다. 객체는 문자 배열에 절대 존재하지 않습니다. 객체 값은 동일 할 수 있지만 객체 비교는 false를 반환합니다. 왜냐하면이 변수는 같지 않기 때문입니다. 자바에서 문자열을 비교하는 가장 좋은 방법은 동일한 방법입니다.

Boolean check = new Boolean(look == click); // DO NOT 
Boolean check = new Boolean(look.equals(click)); // DO 

if 문과 동일합니다.

if (button.getText().toString().equals(click)){..} 

편집 : 여기 그리고 좋은 설명 How do I compare strings in Java?

입니다