[java] 할당 및 동등성 검사가있는이 if 문이 거짓으로 평가되는 이유는 무엇입니까?

할당과 동등성 검사 -d가 함께 있을 때 Java if 문 은 어떻게 작동합니까 OR??

public static void test() {
    boolean test1 = true; 
    if (test1 = false || test1 == false) {
        System.out.println("TRUE");
    } else {
        System.out.println("FALSE");
    }       
}

이 인쇄가 FALSE 인 이유는 무엇입니까?



답변

식은 생각대로 구문 분석되지 않습니다. 아니에요

(test1=false) || (test1 == false)

이 경우 결과는 true이지만

test1 = (false || test1 == false)

false || test1 == falseexpression 의 값이 먼저 계산 되고 계산에 들어가도록 설정 false되었기 때문에 test1입니다 true.

이 방식으로 파싱되는 이유는의 우선 순위 가 연산자 ||보다 낮지 만 ==할당 연산자의 우선 순위보다 높기 때문 =입니다.


답변

이것은 기본적으로 우선 순위 문제입니다. 코드가 다음과 같다고 가정합니다.

if ((test1 = false) || (test1 == false))

…하지만 그렇지 않습니다. 실제로 다음과 같습니다.

if (test1 = (false || test1 == false))

… 이는 다음과 같습니다.

if (test1 = (false || false))

(때문에는 test1것입니다 true로 시작하는)

… 이는 다음과 같습니다.

if (test1 = false)

false을에 할당하고 test1표현식의 결과는 false.

연산자 우선 순위에 대한 유용한 표는 연산자에 대한 Java 자습서를 참조하십시오 .


답변

연산자의 우선 순위를 살펴보십시오

Expression test1 = false || test1 == false은 다음 단계에서 평가됩니다.

STEP : 1- test1 = false || test1 == false // 우선 순위 ==가 가장 높음

STEP : 2- test1 = false || false // 연산자 ||가 더 높은 우선 순위를 가짐

단계 : 3- test1 = false

단계 : 4- false

expression의 boolean 값이 false가되므로 else 문이 실행됩니다.


답변

(test1 = false || test1 == false)둘 다 거짓이기 때문에 거짓을 반환합니다. (test1 = false || test1 == true)그들 중 하나가 사실이기 때문에 이것은 사실입니다


답변