Java &= 운영자는 & 또는 &&를 적용합니까?
가정하다
boolean a = false;
혹시나 했는데...
a &= b;
와 동등하다
a = a && b; //logical AND, a is false hence b is not evaluated.
또는 다른 한편으로는
a = a & b; //Bitwise AND. Both a and b are evaluated.
Java Language Specification - 15.26.2 복합 할당 연산자.
양식의 복합 할당 표현식
E1 op= E2
와 동등하다E1 = (T)((E1) op (E2))
,어디에T
의 유형입니다.E1
단,E1
는 1회만 평가됩니다.
그렇게a &= b;
와 동등하다a = a & b;
.
(일부 사용법에서는, 타이프 캐스팅에 의해서 결과가 다릅니다만, 이 방법에서는,b
그래야만 한다.boolean
타입 캐스트는 아무것도 하지 않습니다).
그리고 참고로a &&= b;
유효한 Java가 아닙니다.거기에는 없다&&=
교환입니다.
실제로, 간에는 의미상의 차이가 거의 없다.a = a & b;
그리고.a = a && b;
. (만약b
변수 또는 상수입니다.결과는 두 버전에서 동일합니다.의 의미적인 차이가 있을 뿐이다.b
부작용이 있는 하위 표현입니다.에서&
부작용은 항상 발생합니다.에서&&
가치에 따라 발생하는 경우a
.)
퍼포먼스 측면에서는 평가 비용 간에 트레이드오프가 발생합니다.b
테스트 비용 및 가치 브랜치a
에의 불필요한 할당을 회피할 수 있습니다.a
분석은 간단하지 않지만 계산 비용이 발생하지 않는 한b
두 버전 간의 성능 차이가 너무 작아서 고려할 가치가 없습니다.
JLS의 15.22.2를 참조한다.부울 오퍼랜드의 경우&
연산자는 비트가 아니라 부울입니다.의 유일한 차이점은&&
그리고.&
boolean 피연산자에 대해서는&&
단락되었습니다(즉, 첫 번째 피연산자가 false로 평가된 경우 두 번째 피연산자가 평가되지 않습니다).
그래서 당신의 경우,b
원시인이지만a = a && b
,a = a & b
,그리고.a &= b
모두 같은 일을 한다.
이게 마지막이야.
a = a & b;
테스트 방법은 다음과 같습니다.
public class OperatorTest {
public static void main(String[] args) {
boolean a = false;
a &= b();
}
private static boolean b() {
System.out.println("b() was called");
return true;
}
}
출력은b() was called
따라서 우측 오퍼랜드가 평가됩니다.
그래서 이미 다른 분들이 언급했듯이a &= b
와 같다a = a & b
.
a가 이미 false일 경우 b()를 호출하는 것을 피하고 싶은 boulans를 사용하여 비슷한 상황을 발견했습니다.
이 방법은 효과가 있었습니다.
a &= a && b()
언급URL : https://stackoverflow.com/questions/3907082/does-the-java-operator-apply-or
'programing' 카테고리의 다른 글
Vue: Vuex getter에서 Per-Route Guard를 사용하는 방법 (0) | 2022.08.18 |
---|---|
글로벌 변수 앞에 static 키워드를 사용하는 경우 (0) | 2022.08.18 |
vue-router를 typescript와 함께 사용하려고 할 때 "No overload matches this call"이 발생한다. (0) | 2022.08.17 |
Vuejs 구성 요소의 클래스 이름을 가진 요소까지 아래로 스크롤합니다. (0) | 2022.08.17 |
SVG 이미지를 추가하여 텍스트 필드를 확인하는 방법 (0) | 2022.08.17 |