
SCJP 기출문제 및 해답(6) 




     



1. 아래의 코드를 실행하면 다음 출력결과 중 옳은 것은 무엇인가?
          String s = "Here's to you";
          String t = s + "Mrs.";
          t += "Robinson.";
  a. s = "Here's to you", t = "Here's to you Mrs.Robinson." 
  b. s = "Here's to you Mrs.", t = "Here's to you Mrs.Robinson."
  c. s = "Here's to you Mrs.", t = "Mrs.Robinson."
  d. s = "null", t = "Here's to you Mrs.Robinson."
  e. s = "null", t = "Robinson."

2. 아래 코드에 대한 설명 중 옳은 것은 무엇인가?
          String s = "Maybe";
          s += "not";
  a. s는 "Maybe not"이 저장될 것이다.
  b. 이 코드는 garbage collector에 의해 수집될 객체가 존재한다.
  c. 이 코드는 단 하나의 문자열 객체가 만들어 진다.
  d. 이 코드는 예외가 발생할 것이다.

3. 다음 중 실행시에 에러를 발생시키지 않는 것은 무엇인가?
  a. "john" + "was" + "here"
  b. "john" + + 3
  c. 3 + 5
  d. 5 + 5.5

4. 아래 코드의 결과값은 무엇인가?
                (4 & 3) + (2 | 1)
  a. 0
  b. 1
  c. 2
  d. 3
  e. 8

5. 아래 코드의 출력결과는 무엇인가?
                System.out.println(4 | 7);
  a. 4
  b. 5
  c. 6
  d. 7
  e. 0

6. 아래 코드의 출력결과는 무엇인가?
                System.out.println(4 & 7);
  a. 4
  b. 5
  c. 6
  d. 7
  e. 0

7. 아래의 코드에서 에러가 발생할 수 있는 부분은 무엇인가?
           public class myClass{
                public String myfunction(){
                        String out = "Hello";
                        int i = 0xff;
                        i >>>= 4;
                        out += i;
                        return(out | i);
                }
           }
  a. i >>>= 4;
  b. out += i;
  c. return(out | i);
  d. 없음

8. 다음 중 아래 코드의 처리결과가 true값을 갖게하는 연산은 무엇인가?
                boolean b1 = true;
                boolean b2 = false; 
  a. b1 == b2
  b. b1 && b2
  c. b1 | b2
  d. b1 || b2 

9. 자바 연산자 중에서 비트를 원하는 비트만큼 오른쪽으로 이동한 후 부호값을 0으로 채우는 연산자는 무엇인가?

10. 아래 코드의 출력결과는 무엇인가?
                class Bit{
                   public static void main(String[] args){
                      int i = 0x00000021;
                      int ans;
                      System.out.println("before: " + i);
                      ans = i >> 2;
                      System.out.println("after: " + ans);                   
                   }
                }
  a. before: 32  after: 16
  b. before: 33  after: 8
  c. before: 33  after: 9
  d. before: 33  after: 1
  e. before: 33  after: 0

11. 다음 중 옳은 것은 무엇인가?
  a. 128 >> 1 gives 64
  b. 128 >>> 1 gives 64
  c. 128 >> 1 gives -64
  d. 128 >>> 1 gives -64

12. 다음 중 바이트 01110111의 값을 00111011로 바꾸기 위한 처리과정이 옳은 것은 무엇인가?
  a. 0x77 << 1; 
  b. 0x77 >> 3;
  c. 0x77 >> 1;
  d. 0x77 >>> 1; 

13. 다음 중 "short circuit" 연산자는 무엇인가?
  a. &
  b. ||
  c. &&
  d. |

14. 다음 중 && 연산자와 관련된 데이터 타입은 무엇인가?
  a. int
  b. long
  c. double
  d. boolean
  e. float

15. 다음 중 옳은 것은 무엇인가?
                if(5 & 7 > 0 && 5 | 2) System.out.println("true");
  a. 이 코드는 컴파일되지 않을 것이다. 
  b. 이 코드는 컴파일은 되지만 아무것도 출력하지 않을 것이다.
  c. 이 코드를 실행하면 "true"가 출력될 것이다.
  d. ..........

16. 아래의 코드에서 만약 A와 B의 값이 같다면 A * B를 반환하고 그렇지 않으면 0을 리턴하는 코드를 쓰시오
                public class myClass{
                   public return int myFun(int A, int B){
                      //이곳에 한줄의 코드를 작성하시오.
                   }
                }
17. 아래의 objRef 인스턴스가 항상 true값을 갖기 위한 이 객체의 타입은 무엇인가?
                objRef instanceof ______
  a. null
  b. void
  c. Object
  d. objRef
  e. Clas

18. 다음 중 자바 문법상 적용되지 않는 것은 무엇인가?
  a. (true & True)
  b. (4 & 5)
  c. (int myInt = 0 > 3)
  d. float myFloat = 40.0;
  e. boolean b = (boolean)99;

19. 아래 코드의 출력결과는 무엇인가?
                long temp = (int)3.9
                temp %= 2
  a. 0
  b. 1
  c. 2
  d. 3
  e. 4



<해답>


1. a
  -. 자바에서는 String 객체와 문자열을 결합연산자('+')를 이용하여 새로운 String 객체를 생성할 수 있다.
  -. 결합연산자('+')는 String 객체의 결합에 주로 사용되는데 만약 결합하고자 하는 자료타입이 String이 아니면 자동적으로 String 타입으로 변환된다.

2. a, b
  -. s += "not";의 의미는 s = s + "not"의 의미이므로 원래 s가 가지고 있는 "Maybe" 뒤에 "not" 이 추가된다. 이때 처음에 정의한  s = "Maybe";의 s는 garbage collector에 의해 제거될 것이다.
  -. 자바에서는 C언어처럼 메모리 관리를 할 필요가 없다. 따라서 변수에 메모리를 할당한 후에 다시 반환할 필요가 없고 garbage collector가 주기적으로 메모리를 검사해서 더 이상 사용되지 않는 메모리를 해제한다. 

3. a, b, c, d
  -. +는 결합연산자와 수식연산자로 사용이 된다.
  -. a, b의 경우는 결합연산자로 사용이 되었으며 특히 b의 경우는 3이 결합되어 String이 된다.

4. d
  -. 각각의 수를 이진수로 변환한 다음 비트 연산을 수행해야 한다.
  -. (4 & 3) --> (0100) & (0011) = (0000)
  -. (2 | 1) --> (0010) | (0001) = (0011)

5. d
  -. (4 | 7) --> (0100) | (0111) = (0111) 

6. a
  -. (4 & 7) --> (0100) & (0111) = (0100)

7. c
  -. out은 String형, i는 int형이므로 서로 다른 타입이며 비트연산은 integral data에서만 가능하다.

8. c, d
  -. '==' 는 등식이므로 true와 false는 서로 같지 않으므로 false 값을 가진다.
  -. '|' 와 '||' 는 or 연산자로 하나가  true이면 결과값이 true 가 되며 '||'는 앞의것이 ture이면 뒤의 것은 확인하지 않고 결과값을 true를 반환한다.

9. >>>
  -. unsigned right shift(>>>) 연산자는 비트를 오른쪽으로 이동시키며 부호 bit를 무시하고 양의 값을 갖도록 한다.

10. b
  -. 0x00000021은 십진수 33이고 이를 이진수 binary code로 변환하면 0010 0001이 된다. 이를 오른쪽으로 2만큼 이동하게 되면 0000 1000이 된다.

11. a, b
  -. 128을 이진수 binary code로 변환하면 1000 0000이 된다. 이를 오른쪽으로 1만큼 이동하면 0100 0000가 된다. 

12. c, d
  -. 0011 1011은 0111 0111을 오른쪽으로 1만큼 이동시킨 것이다.

13. b, c
  -. &&, || 는 최단계산(short circuit evaluation)을 하는데 &&는 앞의 식이 false이면 뒤의 식의 확인없이 결과값을 false를 반환하며 ||는 반대로 앞의 식이 true이면 결과값이 true가 반환된다.

14. &&
  -. &&는 논리연산자이다.

15. a
  -. 5 | 2는 boolean 형태가 아니다. 주의할 것.... 

16. return ((A==B) ? A*B : 0);
  -. 위의 문제는 한줄의 코드로 작성해야 하므로 if ~ else를 사용할 수 없다.

17. c
  -. 모든 객체의 최상위 클래스는 Object이다.
  -. instanceof 연산자는 프로그램 실행시에 데이터 형을 검사할 수 있는 연산자이다. 객체가 주어진 데이터형과 일치하면 true를 반환하하고 그렇지 않으면 false를 반환한다.
  -. 객체의 형에는 기본형을 사용할 수 없으며 클래스나 배열과 같은 객체의 형이어야 한다.
  -. 서브타입, 서브 클래스와 같이 주어진 객체의 형의 특성을 물려받은 경우도 true를 반환한다.

18. a, d, e
  -. c의 경우는 true는 아니지만 문법상의 오류는 없다.
  -. d는 40.0 은 double형으로 float형으로 캐스팅 없이 대입하려면 오류가 발생한다.
  -. boolean형은 캐스팅이 허용되지 않는다. 

19. b
  -. 3.9를 int형으로 캐스팅 하면 3이되고 이를 2로 나눈 나머지를 구하면 1을 갖는다.



위의 해답중에 틀린 답 또는 설명이 있거나, 의문이 가는 점이 있으면 게시판에 적어주시거나 메일을 보내주세요... 
성심껏 답변해 드리겠습니다.... ^_^ 

