2010-04-24 3 views
14

나는 다소 혼란스러워하는 문제가 있습니다. 내 안드로이드 응용 프로그램에서 다음 코드 줄을 : 내가 처음에 println 문의 출력을 볼 때안드로이드의 자바에서 문자열이 동일하지 않은 것처럼 보일 수도 있지만

System.out.println(CurrentNode.getNodeName().toString()); 
if (CurrentNode.getNodeName().toString() == "start") { 
    System.out.println("Yes it does!"); 
} else { 
    System.out.println("No it doesnt"); 
} 

그것은 (분명히 따옴표없이) "시작"으로 로그 캣에 나타납니다. 하지만 if 문이 실행되면 else 문으로 이동하여 "아니요"라고 인쇄합니다.

노드의 이름에 인쇄 할 수없는 문자가 포함되어 있는지 궁금해했습니다. 따라서 getNodeName()에서 오는 문자열의 길이를 확인 했으므로 예상 한대로 5 자입니다. .

여기에 무슨 일이 일어나는 지 아십니까?

답변

44

String을 비교하기 위해 String의 equals 메서드를 사용하십시오. == 연산자는 객체 참조를 비교합니다.

if (CurrentNode.getNodeName().toString().equals("start")) { 
    ... 
+0

'CurrentNode.getNodeName(). toString()의 결과는 무엇입니까?'(시작) == "시작". 등가 (CurrentNode.getNodeName(). toString()'? –

+0

@MohammedShareefC I ' d 사실을 기대할 수는 있지만 테스트 해 보면 알 수 있습니다. –

+0

예. 너무 게으르다 죄송합니다. –

7

당신은 .equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... } 
13

사용 CurrentNode.getNodeName().toString().equals("start")를 사용해야합니다.

Java에서 가장 흔한 실수는 새로 입력 한 문자가 == 인 문자열을 비교하는 것입니다. 기억해야 할 것은 신원이 (생각하는 메모리 주소)이고 이 아닙니다. ==은 기억해야합니다.

+0

이 설명에 대해 고맙습니다. 왜 지옥이 == 작동하지 않는지 궁금한 소중한 시간을 낭비했습니다. – imin