java 특수문자 자바에서 평가의 부울 표현식 순서?



정규식 특정 문자 사이 (4)

그러나 일부 컴파일러는 첫 번째 조건이 실패하면 부울 식을 완전히 종료한다는 것을 알고 있습니다. 자바에서도 마찬가지입니까?

예, 단락 회로 평가 로 알려져 있습니다. &&|| 그러한 작업을 수행하는 연산자입니다.

아니면 평가 순서가 보장되지 않습니까?

아니요, 평가 순서가 보장됩니다 (왼쪽에서 오른쪽으로).

내가 다음과 같은 표현을 가지고 있다고 가정 해보자.

String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}

이클립스는 myString 이 부울 표현식의 두 번째 구문에서 null 일 수 있다고 경고합니다. 그러나 일부 컴파일러는 첫 번째 조건이 실패하면 부울 식을 완전히 종료한다는 것을 알고 있습니다. 자바에서도 마찬가지입니까? 아니면 평가 순서가 보장되지 않습니까?


Answer #1

James와 Ed는 정확합니다. 이전에 실패한 조건에 관계없이 모든 식을 계산하기를 원하는 경우가 발생하면 비 단락 부울 연산자 & 사용할 수 있습니다.


Answer #2

자바는 진술을 왼쪽에서 오른쪽으로 평가해야한다. 첫 번째가 거짓 인 경우 두 번째, 세 번째 및 네 번째 조건이 테스트되지 않도록하기 위해 단락 회로 평가 라는 메커니즘을 사용합니다.

따라 myContainer != null && myContainer.Contains(myObject)myContainer != null && myContainer.Contains(myObject) 이고 myContainer 가 null이면 두 번째 조건 인 myContainer.Contains(myObject) 가 계산되지 않습니다.

편집 : 다른 사람이 언급했듯이, 자바는 특히 부울 조건에 대한 단락 및 비 단락 회로 연산자를 모두 가지고있다. && 를 사용하면 단락 회로 평가가 실행되고 & 는 실행되지 않습니다.


Answer #3

예, Java는 if 문을 이런 방식으로 게으른 평가를합니다. myString == null의 경우, 나머지 if 문의 평가는 실시하지 않습니다.





boolean-expression