2010-03-28 3 views
0

왜 출력이 잘못 인쇄됩니까?ArrayList 요소를 읽으십시오

ArrayList<String> loc = new ArrayList<String>(); 

ArrayList의이 값 저장 :

[topLeft, topLeft, topLeft, bottomLeft, topLeft, bottomLeft, topLeft, topLeft, Left, topLeft] 

을 전나무 인덱스 0은 = 좌상

if(loc.get(1)=="topLeft") 
    System.out.println("same") 

else { 
    System.out.println("not same") 
} 

이 프로그램의 인쇄가 잘못된 출력 not same 대신 same

답변

3

이용 equals(Object) 방법, == 연산자가 아닙니다. 예를 들어 loc.equals("topLeft")

== 연산자는 두 개의 참조가 동일한 객체를 메모리에 가리키는 경우 true를 반환합니다. equals(Object o) 메서드는 두 객체가 동일한 지 여부를 확인하므로 두 문자열이 같은 순서로 같은 문자 만 포함하면 true를 반환합니다.

+0

정말 고마워요. 어떻게 그걸 놓칠 수 있니? :-) – Jessy

1

문자열 비교는 == 대신 str1.equals(str2)을 호출하여 수행됩니다.

  • equals(..)
  • ==이 참조를 비교하고 그들이 동일하지 않은 문자열 '내용을 비교합니다.

그러나 조금 더 알아야 할 것이 있습니다. 리터럴로 초기화 String 개체, 즉

대신 건설 ( String str = new String("some")) 비아
String str = "someString" 

모두 같은 목적이다. 그들에게 ==이 효과가 있습니다.

마지막으로 String 인 경우 intern()을 호출하면 내용이 같은 다른 모든 문자열과 동일한 개체 인 String가 반환됩니다. (자세한 내용은 intern()의 설명서를 참조)

그러나 여기에 가장 좋은 방법은 당신이 (첫 번째 문자열)에 호출 된 개체가 null가 아닌 경우주의하면서, equals()을 사용하는 것입니다.

+0

Bozho .. 감사합니다. – Jessy