2013-10-04 2 views
0

true로 STMT의 evalutes "만약"아래 다음의 값 출력 = 20 그렇지 않으면 10 .. 성명 평가 if 문 자바

사람이 증가 연산자 여기에 어떻게 작동하는지 설명 할 수 있습니다.?

public class Test { 

    public static void main(String[] args) throws IOException { 
     int Output = 10; 
     boolean b1 = true; 
     if ((b1 == true) && ((Output += 10) == 20)){ 
      System.out.println("We are Equal = " + Output); 
     } 
     else{ 
      System.out.println("Not Equal = " + Output); 
     } 
    } 
} 

답변

5

다르게 작동하는 것은 += 연산자가 아닙니다. 그것은 && 연산자입니다.

&& 연산자 단락. b1이 false이면 b1 && (anything else)이 참일 수는 없으므로 평가가 중단됩니다. 따라서, b1 사실이 아닌 경우 Output += 10 평가되지 않으므로 Output는 10

b1에 해당하는 경우,이 조건의 나머지에 해당하는 경우가 계속되어야 할 것이다. 이렇게에서는 이에 Output 10의 값을 증가하는 정수 값이 10Output의 현재 값에 추가된다 (20) Output

+0

+1'&&'가'&'(비트 단위)로 변경되면'Output + = 10'은 항상 연산이 단락되지 않기 때문에 항상 추가됩니다. – dkatzel

1

의 값을, Output += 10을 평가한다. 이 후, 출력 값은 == 연산자를 사용하여 비교되며, 연산자는 부울에서만 작동합니다. b1 참이고 및 출력이 값 (10)에 의해 증가 된 후 20이므로, if 블록의 조건에 해당하는 코드의 특정 조각

는 따라서 else 폐기하고 어떤 코드 것은 if 내부 될 블록이 실행됩니다.

-1

1) + = 은 "사전 증가"를 의미합니다. 점진이 경우, 블록의 처음 실행 중에, done..So되면 그래서 Output=10와 블록 ..

여기
if ((b1 == true) && ((Output = Output + 10) == 20)){ 

, 출력의 값이 20과 비교되는 바와 같이 아래가 것이다 진행할 것인지 =+ 는 "사후 증가"를 의미

if ((b1 == true) && ((20) == 20)){ 

2) .. 아래와 같이 진행. 따라서, 출력의 값이 경우 블록의 처음 실행시, incrementation..So 전 (20)와 비교됩니다 .. 그것은

if ((b1 == true) && ((10) == 20)){ 

희망이 explaination이 :-)하는 데 도움이 .. 아래와 같이 진행할 것

+0

'= +'연산자가 없습니다. 'x = + 10'문은 x에 값 '+ 10'을 할당합니다. – Grodriguez

+0

또한 '+ ='는 복합 대입 연산자입니다 (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2). preincrement 연산자 ('++ x')와 혼동하지 마십시오. – Grodriguez

+0

오오 .. 내 나쁜! 이 녀석 들께 감사드립니다 :-) – milin4evr