자바 문자열 퀴즈에 오신 것을 환영합니다. 문자열은 자바에서 가장 중요한 클래스 중 하나입니다. 자바로 프로그래밍을 한 적이 있다면 반드시 사용해 보았을 것입니다.
자바 인터뷰 질문이나 퀴즈에서 문자열은 매우 인기가 있습니다. 그래서 몇 가지 흥미로운 자바 문자열 퀴즈 문제를 모았습니다. 도전해 보세요.
자바 문자열 퀴즈
이 퀴즈에는 21개의 문제가 있습니다. 15개 이상을 정확히 대답할 수 있다면 문자열 개념에 정말 능숙하다고 할 수 있습니다. 각 문제 뒤에 있는 “답 보기” 버튼을 클릭하여 정답과 상세한 설명을 확인할 수 있습니다.
자, 문자열 퀴즈를 시작해 봅시다. 행운을 빕니다.
1. 아래 문장들의 결과는 무엇인가요?
String s = "Java String Quiz";
System.out.println(s.charAt(s.toUpperCase().length()));
A. Convert “Z” to int 90 and prints “90”
B. Runtime Exception
C. Prints “z”
D. Prints “Z”
Click to Reveal Answer
**정답: B
**
런타임 예외가 발생합니다. Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16
이유는 인덱스 값이 0부터 시작하기 때문입니다.
2. 아래 문장들의 결과는 무엇인가요?
String s = "Java String Quiz";
System.out.println(s.substring(5,3));
A. Prints “Str”
B. Runtime Exception
C. IndexOutOfBoundsException Runtime Exception
D. StringIndexOutOfBoundsException Compile-time error
Click to Reveal Answer
**정답: B
**
런타임 예외가 발생하며 오류 메시지는 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16
입니다. 이유는 끝 인덱스가 시작 인덱스보다 작기 때문입니다.
3. String 클래스의 모든 유효한 메소드를 선택하세요.
A. trim()
B. intern()
C. toLower()
D. split()
Click to Reveal Answer
정답: A, B
String 클래스의 유효한 메소드는 trim(), intern(), toLowerCase(), 그리고 split(String regex)입니다.
4. 아래의 문장들의 출력은 무엇일까요?
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.print(s1 == s2);
System.out.print(s1 == s3);
A. truefalse
B. truetrue
C. falsefalse
D. falsetrue
Click to Reveal Answer
**정답: A
**
우리가 이중 따옴표를 사용하여 String을 생성할 때, 먼저 String 풀에서 같은 값을 갖는 String을 찾습니다. 만약 발견된다면, 참조를 반환하고 그렇지 않으면 풀에 새로운 String을 생성한 후 참조를 반환합니다.
하지만 new 연산자를 사용함으로써, String 클래스에게 heap 공간에 새로운 String 객체를 생성하도록 강제합니다. 그래서 s1과 s2는 풀에 있는 동일한 String을 참조하게 되고, s3는 풀 외부에서 다른 객체가 됩니다. 이것이 출력 결과입니다.
5. switch case에서 string에 대해 참인 것은 무엇인가요?
A. String is allowed in switch case for Java 1.5 or higher versions.
B. String is allowed in switch case for Java 1.7 or higher versions.
C. The equals() method is used by switch-case implementation, so add null check to avoid NullPointerException.
6. StringBuffer와 StringBuilder에 대해 참인 것은 무엇인가요?
A. StringBuilder is not thread-safe.
B. StringBuffer is thread safe because its methods are synchronized.
C. StringBuilder was introduced in Java 1.4
D. StringBuffer and StringBuilder are immutable.
Click to Reveal Answer
정답: A, B
StringBuffer 객체는 메소드가 동기화되어 있기 때문에 스레드 안전합니다. 하지만 대부분의 경우에는 오버헤드가 발생하기 때문에 Java 1.5에서 StringBuilder가 도입되었습니다. StringBuilder는 스레드 안전하지 않습니다. StringBuffer와 StringBuilder는 변경 가능한 클래스입니다. 자세한 내용은 String vs StringBuffer vs StringBuilder에서 확인하세요.
7. String 구현은 아래 어떤 디자인 패턴을 따를까요?
A. Flyweight Design Pattern
B. Factory Pattern
C. Singleton Pattern
D. None of the above
8. 아래 문장들의 출력은 무엇일까요?
String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));
A. 0
B. true
C. -3
D. false
Click to Reveal Answer
**정답: C
**
**
String compareTo() 메소드 설명에서:
compareTo 메소드는 두 문자열을 사전적으로 비교합니다. 비교는 각 문자열의 유니코드 값에 기반합니다. 이 String 객체가 나타내는 문자열 시퀀스가 인수로 제공된 문자열과 사전적으로 비교됩니다. 결과는 이 String 객체가 인수 문자열보다 사전적으로 앞선 경우 음의 정수입니다. 결과가 양의 정수인 경우 이 String 객체가 인수 문자열을 사전적으로 따릅니다. 문자열이 동일한 경우 결과는 0이며 compareTo는 두 문자열이 동일한 경우에만 0을 반환합니다.
이것이 사전적 순서의 정의입니다. 두 문자열이 다르면 그들은 어떤 색인이 두 문자열에 모두 유효한 색인인지 다른 문자를 갖거나 길이가 다르거나 또는 둘 다입니다. 다른 색인 위치에서 다른 문자를 갖는 경우 k를 가장 작은 이러한 색인으로하십시오. 이 경우 k 위치에서 이 문자열의 문자 값이 작은 값을 갖도록 결정하는 < 연산자를 사용하여 사전적으로 다른 문자열을 앞서게됩니다. 이 경우 compareTo는 두 문자열 간의 두 문자 값의 차이, 즉 값 반환:
this.charAt(k)-anotherString.charAt(k)
예제에서는 “abc”가 “def”보다 앞에 있으므로 음의 정수가 반환됩니다. 그런 다음 다른 문자가 있는 가장 작은 인덱스는 0이며 a-d는 -3과 같습니다.
9. 아래 프로그램의 출력은 무엇일까요?
public class Test {
public static void main(String[] args) {
String x = "abc";
String y = "abc";
x.concat(y);
System.out.print(x);
}
}
A. abc
B. abcabc
C. null
Click to Reveal Answer
정답: A
x.concat(y)
는 새로운 문자열을 생성하지만 x에 할당되지 않으므로 x의 값은 변경되지 않습니다.
10. 아래 프로그램의 출력은 무엇일까요?
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println("s1 == s2 is:" + s1 == s2);
}
}
A. false
B. s1 == s2 is:true
C. s1 == s2 is:false
D. true
Click to Reveal Answer
정답: A
주어진 문장의 출력은 “false”가 됩니다. 왜냐하면 Java에서 + 연산자의 우선순위가 == 연산자보다 높기 때문입니다. 따라서 주어진 식은 “s1 == s2 is:abc” == “abc”로 평가되어 false가 됩니다.
11. 아래 문장의 출력은 무엇일까요?
String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);
A. Java3Quiz7
B. Java12Quiz7
C. Java12Quiz34
D. Java3Quiz34
Click to Reveal Answer
정답: B
먼저 괄호 안의 식이 실행됩니다. 그런 다음 모든 + 연산자가 실행되므로 왼쪽에서 오른쪽으로 실행됩니다.
각 연결 작업마다 문자열이 생성되므로 아래와 같이 출력됩니다.
“Java”+1+2+”Quiz”+””+(3+4)
= “Java”+1+2+”Quiz”+””+7
= “Java1″+2+”Quiz”+””+7
= “Java12″+”Quiz”+””+7
= “Java12Quiz”+””+7
= “Java12Quiz”+7
= “Java12Quiz7”
12. 아래 문장에서 생성된 문자열 개체는 몇 개입니까?
String s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2
A. 1
B. 2
C. 3
D. 4
Click to Reveal Answer
정답: C
문장 1에서 “abc”는 문자열 풀에 생성됩니다.
2. 첫 번째로 “abcd”가 문자열 풀에 생성됩니다. 그런 다음 String new 연산자에 인수로 전달되어 힙 메모리에 또 다른 문자열이 생성됩니다.
따라서 총 3개의 문자열 객체가 생성됩니다.
13. 아래 문장의 출력은 무엇입니까?
String s1 = "abc";
String s2 = new String("abc");
System.out.print(s1==s2);
System.out.println(s1==s2.intern());
A. falsetrue
B. falsefalse
C. truetrue
D. truefalse
Click to Reveal Answer
정답: A
s1은 문자열 풀에 있고 s2는 힙 메모리에 생성됩니다.
따라서 s1==s2는 false를 반환합니다.
s2.intern()
메서드가 호출되면 풀에 값이 “abc”인 문자열이 있는지 확인합니다. 따라서 s1의 참조를 반환합니다. 이제 s1과 s2는 동일한 문자열 인스턴스를 가리키고 있습니다.
따라서 s1==s2.intern()는 true를 반환합니다.
14. String 클래스에서 구현된 모든 인터페이스를 선택하세요.
A. Serializable
B. Comparable
C. Constable
D. Cloneable
Click to Reveal Answer
정답: A, B, C
String은 serializable과 comparable 인터페이스를 구현합니다. Constable은 Java 12에서 새로 추가된 인터페이스입니다.
15. Map 키로 사용하기에 적합한 String의 이유를 선택하세요.
A. String is immutable
B. String is final
C. String properly implements hashCode() and equals() method
C. String hashcode is cached
Click to Reveal Answer
**정답: A, B, C
**
Map 키의 올바른 hashCode() 및 equals() 메서드 구현은 필수입니다. 문자열은 final이고 immutable하므로 키 데이터가 손상될 가능성이 없습니다.
16. 아래 코드 스니펫의 출력은 무엇입니까?
String s1 = new String("java");
String s2 = new String("JAVA");
System.out.println(s1 = s2);
A. JAVA
B.java
C. true
D. false
Click to Reveal Answer
**정답: A
**
“JAVA”를 출력합니다. println() 메서드 내부의 인수가 할당으로 처리되기 때문입니다. 따라서 System.out.println("JAVA")
으로 처리됩니다.
17. 아래 문장의 출력은 무엇입니까?
String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
A. false
B. true
C. ClassCastException at runtime
D. Compile-time error
Click to Reveal Answer
정답: A
이것은 거짓으로 인쇄될 것입니다. 왜냐하면 s2는 문자열 유형이 아니기 때문입니다. String equals() 메소드 구현을 살펴보면 instanceof
연산자를 사용하여 전달된 객체의 유형이 문자열인지 확인하는 확인이 있습니다. 그렇지 않으면 거짓을 반환합니다.
18. 아래 코드 스니펫의 출력은 무엇일까요?
String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);
A. false
B. true
C. null
Click to Reveal Answer
정답: A
이것은 까다로운 질문이며 출력은 거짓일 것입니다. intern() 메소드가 문자열 풀에서 문자열 객체 참조를 반환할 것을 알고 있지만, 우리가 s2에 할당하지 않았기 때문에 s2에는 변화가 없습니다. 따라서 s1과 s2는 서로 다른 참조를 가지고 있습니다.
만약 코드를 3번째 줄에서 s2 = s2.intern();
로 변경하면 출력이 참이 될 것입니다.
19. String 클래스를 확장하는 모든 클래스를 선택하십시오.
A. StringBuffer
B. StringBuilder
C. StringWriter
D. None
Click to Reveal Answer
**정답: D
**
이것은 까다로운 질문입니다. String은 final 클래스이므로 확장할 수 없습니다.
20. Java에서 String에 대한 다음 진술 중 어느 것이 사실인가요?
A. We can extend String class like StringBuffer does it.
B. String class is defined in java.util package.
C. String is immutable in Java.
D. String is thread-safe in Java.
E. String is case sensitive in Java.
Click to Reveal Answer
정답: C, D, E
String 클래스를 확장할 수 없습니다. 왜냐하면 그것은 final입니다. StringBuffer는 그것을 확장하지 않습니다. String 클래스는 java.lang
패키지에 정의되어 있습니다. 문자열은 변경할 수 없으며 따라서 Java에서 스레드로부터 안전합니다. 문자열은 대소문자를 구분하므로 “abc”는 “ABC”와 같지 않습니다.
21. 아래 문장들의 출력은 무엇일까요?
String s1 = null;
System.out.print(s1); // line 2
System.out.print(s1.toString()); // line 3
A. nullnull
B. null followed by NullPointerException
C. NullPointerException
Click to Reveal Answer
정답: B
2번째 줄은 null
을 인쇄합니다. 왜냐하면 print
메소드에는 이러한 null 확인이 있기 때문입니다:
if (s == null) { s = "null";}
Line 3은 NullPointerException을 발생시킬 것입니다. 왜냐하면 우리가 null에 대해 toString() 함수를 호출하려고 하기 때문입니다.
결론
I have tried to cover most of the important points about String in this Quiz. If you think some interesting concept has been missed, please let me know through comments. If you liked the Quiz, share it with others too.
Source:
https://www.digitalocean.com/community/tutorials/java-string-quiz