2012-12-20 6 views
1

다음은 내가 작성한 커다란 라이브러리의 일부이므로 작은 코드 만 보여줍니다. 더 많은 정보가 필요하면 알려주십시오.에 ArrayList가 포함되어 있지 않습니다.

저는 베지에 앵커를 선택할 수있는 도구를 만들고 있습니다. 이상한 점은, 예를 들어 하나의 앵커를 선택한다는 것입니다. 그런 다음 선택 해제 된 앵커가 선택되고 선택되지 않은 앵커가 선택 해제되는 토글 선택에 대해 시프트를 유지할 수 있습니다. 같은 앵커를 선택했습니다. 그런 다음 첫 번째 코드 줄에서 ArrayList lastAnchorSelection에 있는지 확인합니다. 그것은 부분적 이었지만 어떤 이유로 든 계속됩니다. 그러면 마지막 선택의 크기 인 1을보고합니다. 그러면 arrayList에서 객체를 꺼내 v에 대해 테스트합니다. 그러면 true가 출력됩니다.

그래서 네 번째 줄이 참인 경우 첫 번째 줄이 false가 될 수 있습니까?

if (lastAnchorSelection.contains(v) == false) { 
    System.out.println("lastAnchorSelection.size(): "+lastAnchorSelection.size()); 
    CVector test = lastAnchorSelection.get(0); 
    System.out.println(test == v); 
    System.out.println("C"); 
+2

'v'의 클래스는 무엇입니까? 'equals()'를 오버라이드하고 있습니까? –

+0

'CVector'의'equals()'메소드를 게시하십시오. – Qwerky

답변

4

Collection.containsequals() 방법으로 지정됩니다. equals()의 구현은 그것은 재귀입니다

  • 첫 번째있는, (개체 클래스의 javadoc를 참조) 규칙의 번호를 따르도록되어 있습니다 : null 이외의 참 값 x을 위해, x.equals(x)true를 반환해야합니다.

그러나이 규칙을 위반하는 구현을 준수하지 않는 클래스가 v 인 것 같습니다.

스레드 문제이거나 일부 다른 스레드가테스트 결과와 get(0) 사이의 목록에 v을 추가합니다. 이리스트로 지정된 요소가있는 경우

+0

젠장. 내 v는 vectorc 클래스 였고, 나는 수천 개월 전부터 내 자신의 변경 사항을 basiscly 복사 및 pased. 나는 그것이 자신의 equals 메소드라는 것을 알지 못했다.덕분에 ! – clankill3r

2

첫 줄은 equals()을 사용하여 비교합니다. 두 번째 줄은 비교를 사용합니다.

0

ArrayList에서

true를 반환합니다. 이리스트가 (o == null? e == null : o.equals (e))와 같은 적어도 1 개의 요소 e를 보관 유지하는 경우에만 true를 리턴합니다.

귀하의 경우, 이는 v.equals(test)입니다. false를 반환하면 contains(v)도 false를 반환합니다.

라인 4는 v.equals(test)과 다른 비교 인 v == test을 비교합니다.

v == testvtest의 참조를 비교합니다. vtest이 같은 객체를 참조하면 true를 반환합니다. v.equals(test)equals 메서드를 호출하는데, 구현에 따라 아무 것도 반환 할 수 있습니다 (심지어 false).

+0

테스트를 거쳤으며 System.out.println (lastAnchorSelection.contains (v)); 참으로 거짓을 반환합니다. 하지만 여전히 4 행이 어떻게 돌아올 수 있는지 알 수 없습니다. – clankill3r

+0

@ clankill3r 업데이트 된 답변을 참조하십시오. –

+0

감사합니다. 이해합니다. – clankill3r

관련 문제