4.1) OCJP/1Z0-851 / 2012-08-28

OCJP (1Z0-851 / 2012-08-28 / Exam A) - 29 번

kkikkodev 2015. 7. 25. 21:28



관련 이론 및 문법

(String 클래스 VS StringBuilder  클래스 참고)

http://kkikkodev.tistory.com/102


문제 의도

주어진 소스코드의 24 라인에 보기를 삽입하였을 때, 출력 결과가 "123abc 123abc" 인 것을 고르는 문제입니다.


답안

E


풀이 방법

22 라인을 보면, sb1 이라는 StringBuilder 형 변수에 "!23" 값으로 초기화를 하고 있고, 23 라인을 보면, s1 이라는 String 형 변수에 "123" 값으로 초기화를 하고 있습니다. 25 라인에서는, sb1 + " " + s1 을 출력하고 있습니다. 이 출력 결과가 "123abc 123abc" 가 되려면 24 라인이 지난 뒤, 25 라인에서 sb1 과 s1 값이 각각 "123abc" 이어야 한다는 것입니다. 


24 라인에서는, 결국, 각각의 StringBuilder 형 변수와 String 형 변수에 "abc" 값을 덧붙여야 하는데, StringBuilder 클래스는 append 메소드를 통해서 문자열을 덧붙입니다. 따라서, 보기 C, D, F, H 는 답안 후보에서 제외합니다. 그리고, Stirng 클래스는 concat 메소드 혹은 + 연산자를 통해서 문자열을 덧붙입니다. 따라서, 보기 A, C 는 답안 후보에서 제외합니다. 


즉, A, C, D, F, H 를 제외한, B, E, G 가 답안 후보가 됩니다. 이 중에서, String 형 클래스는 concat 메소드나 + 연산자를 통해 문자열을 덧붙인 결과를 반환값으로 받아서, 그 반환값을 다시 s1 에 대입을 해야만 비로소 s1 의 값도 변경되게 됩니다. (String 클래스는 + 나 concat 한다고 해서 자기 자신의 값이 바뀌지 않습니다. 단지, 바뀐 임시 String 클래스 인스턴스를 만들어서 반환만 할 뿐입니다.) 따라서, 반환된 결과를 대입하고 있는, E 와 G 가 답안 후보가 되고, 마지막으로, G 는, s1 = s1 + s1.concat("abc") 를 하고 있는데, 먼저, s1.concat("abc") 의 결과가 "123abc" 가 되고, s1 + "123abc" 를 하면 "123123abc" 가 됩니다. 따라서, 답안 후보에서 제외합니다. 최종적으로, 답안은 E 가 됩니다.