2014-01-18 7 views
5

b이 거짓 일 경우 c을 검사하지 않는 방식으로 Java의 조건문을 연결하는 방법은 무엇입니까?Java OR 연산자 우선 순위

ac이 거짓이고 b이 참이면 c이 검사됩니까?

if (a || b || c) 

나는 왼쪽 피연산자가 true 경우 추가 인수를 평가하지 않습니다 OR 사이 ||

+5

아니요, || 단락 회로 평가를 수행합니다. 따라서 a가 거짓이면 b가 검사되고 b가 참이면 c가 검사되지 않습니다. 만약 당신이 확실하지 않다면, 당신은 항상 테스트 할 수 있습니다 : http://ideone.com/mCE8hy –

답변

12

자바 || 연산자 (논리 OR 연산자) PHP는 차이가 보유하고 유사한 기능을 찾고 있습니다. 원한다면 | (비트 또는 연산자)을 사용할 수 있습니다. 이름에 따르면, 이것은 약간 해킹입니다.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.23

따라서, & & 부울 오퍼랜드 &와 동일한 결과를 산출한다. 오른쪽 피연산자 표현식이 항상 아닌 조건부로 평가된다는 점이 다릅니다. 따라서

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24, || |와 같은 결과를 얻는다. boolean 또는 Boolean 오퍼랜드. 오른쪽 피연산자 표현식이 항상 아닌 조건부로 평가된다는 점이 다릅니다.

추가 : 부작용이있는 코드를 조건부로 호출하기 위해 이러한 의미 체계에 의존하는 잘못된 프로그래밍 스타일로 간주됩니다.

+0

때로는 당신이 프로그램의 성능을 짜내고 싶다면 –

+0

아, 나는 당신이'if (isAlright || doSomething()) ... '이 아니라'if (firstCondition || expensiveSecondCondition()) ...'이 아닙니다. 첫 번째는 부작용이있는 메소드이고 두 번째는 부작용이없는 값 비싼 함수입니다. 나는 두 번째 것이 어쨌든 괜찮다고 말하고 싶다. –

+0

여전히 그늘지고 읽기가 힘들지 만, 때로는 때로는 사양을 충족해야합니다 .-) –

0

a이 거짓이고 b이 참이면 c은 평가되지 않습니다.

Java에서 논리 연산자의 단락을 다루는 answer을 참조하십시오.

2

c은 확인되지 않습니다. 이를 증명하기 위해, 다음과 같은 코드를 사용할 수 있습니다

boolean a() { 
    System.out.println("a") 
    return false; 
} 

boolean b() { 
    System.out.println("b") 
    return true; 
} 

boolean c() { 
    System.out.println("c") 
    return true; 
} 

void test() { 
    if(a() || b() || c()) { 
    System.out.println("done") 
    } 
} 

가 출력 될 것입니다 :

a 
b 
done 
0

1) 그게 B은 어떻게하는 방식으로 체인 자바 조건문에 거짓, 체크하지 않는 것보다 c?

  • 왜 그렇게해야합니까 ??그것은 사망 또는 논리 - 뉴 웨이즈 c 다음
  • 그래서 당신의 대답은 간단 if (a || b)
  • 또는 당신이 if (a || (b && c))

2) A와 C가 거짓인지를 찾고있을 수 있습니다 비 물질적이며, B는 사실, c가 검사됩니까? [경우 (a || B 형 || 온도)]

  • 아니
  • ||은 단락을 평가한다. afalse입니다 그렇다면, b이 확인되고 b에 해당하는 경우, c는 단락 회로 평가에 대한 자세한 내용은

을 검사하지 않습니다 : refer

0

경우 (A || B 형 ||의 C)

당신의 경우,

a가 참이면 b와 c는 체크되지 않습니다.

a는 거짓이고 b는 true이고 c는 확인되지 않습니다.

a 및 b가 거짓이면 c가 검사됩니다.

연산자의 왼쪽이 먼저 평가됩니다.