2013년 3월 25일 월요일

OCJP 문제풀이 - Question 36


QUESTION 36
Given:
public class Test {
  public static void main(String [] args) {
    int x = 5;
    boolean b1 = true;
    boolean b2 = false;

    if ((x == 4) && !b2 )
      System.out.print("1 ");
    System.out.print("2 ");
    if ((b2 = true) && b1 )
      System.out.print("3 ");
  }
}

What is the result?

A. 2
B. 3
C. 1 2
D. 2 3
E. 1 2 3
F. Compilation fails.
G. An exception is thrown at runtime.

Answer: D
Section: All

Explanation/Reference:

if문에 중괄호가 없으면 바로 다음 문장만 실행된다는 사실과
line 20 에서 '==' 가 아닌 '=' 이 쓰였다는 점만 주시하면 되는 문제.
b2에 true 를 대입한 것이므로 line 21 은 실행된다.

참고로 A && B 는 A와 B가 모두 true 이면 true 를 반환한다.
A & B 와의 차이점은

A && B 의 경우 A가 false 이면 B는 실행되지도 않은 채로 넘어가지만
A & B 는 A가 false인 경우에라도 B를 실행한다.