programing

Java &= 운영자는 & 또는 &&를 적용합니까?

bestcode 2022. 8. 17. 23:50
반응형

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

반응형