0

나는 (분명히 null이 아닌) 내 개체 중 하나를 인쇄 할 때 내가 좀 이상한 일을 실행했다. 내 item 객체가 null 경우조건 연산자()

text.append("\n [ITEM ID]: " + (item == null ? (otherItem == null ? 0 : otherItem .getItems().get(i).getId()) : item .getItems().get(i).getId())); 

더 널 포인터 예외가 없습니다 :이 회선을 사용하는 경우

. 물론 이것은 예외적 인 결과 여야합니다. 나는 ()마르크없이 사용한다면 :

text.append("\n [ITEM ID]: " + item == null ? (otherItem == null ? 0 : otherItem .getItems().get(i).getId()) : item .getItems().get(i).getId()) 

나는 조건 연산자는 연산자의 다른 부분을 실행하지 않습니다 생각하지만 난 NullPointerException이 있어요. 이 경우 ()마르크를 사용하는 것이 필수적입니다 왜 누군가가 나에게 그것을 설명하는 경우

나는 감사하겠습니다. 당신이 작동하려면 넣어 할 수 있도록

+1

연산자 우선 순위의 경우를 참조하십시오? –

+3

힌트 :' "\ n [아이템 ID] :"+ 아이템 "은 ...이됩니까? –

답변

1

"\n [ITEM ID]: "item 사이의 연결은, 평등 테스트하고 괄호 (자바 사업자의 precedences 참조) 넣어하지 않는 경우 조건 연산자에 우선합니다 (("\n [ITEM ID]: " + item) == null은 아마도 당신이 평가하고자하는 것이 아닙니다.)

+0

감사합니다. 두 가지 완벽한 대답, 나는 받아 들일 수 없다. 하지만 나는 첫 번째 것을 받아 들여야한다고 생각하지만, 정말 talnicolas 고맙습니다! 그게 내가 괄호가 필요했던 것 ... – czupe

+0

@czupe 글쎄, 실제로 먼저 대답했지만 어쨌든 환영합니다;) – talnicolas

+0

ok. 당신이 처음이고, 당신이 == vs + 연산자를 썼다는 것을 평가한다면, 나는 당신이 나의 동의를 얻는다고 생각한다. 다시 한번 감사드립니다. 좋은 하루 되세요. – czupe

1

연산자가 ? :보다 높은 우선 순위를 가지므로 괄호를 사용해야합니다. http://bmanolov.free.fr/javaoperators.php

+0

답장을 보내 주셔서 감사합니다. – czupe

+0

이 경우'=='보다 우선 순위가 높습니다. –

+0

예 더 귀중하게 연결 연산자는 ==보다 우선 순위가 높습니다 (조건부 연산자는 부적합 함). 이해합니다 .... – czupe