웹사이트 검색

Java 문자열 인터뷰 질문 및 답변


소개

String은 가장 널리 사용되는 Java 클래스 중 하나입니다. 이 문서에서는 인터뷰 준비에 도움이 되는 String에 대한 몇 가지 연습 질문과 답변을 제공합니다.

Java 문자열 퀴즈를 통해 String 클래스에 대한 지식을 테스트할 수도 있습니다.

Java의 String 클래스는 무엇입니까? 문자열이 데이터 유형입니까?

String은 Java의 클래스이며 java.lang 패키지에 정의되어 있습니다. intlong과 같은 기본 데이터 유형이 아닙니다. String 클래스는 문자열을 나타냅니다. String은 거의 모든 Java 응용 프로그램에서 사용됩니다. String은 변경 불가능하고 Java에서는 최종이며 JVM은 문자열 풀을 사용하여 모든 String 개체를 저장합니다. 큰따옴표를 사용하여 String 개체를 인스턴스화할 수 있으며 연결을 위해 + 연산자를 오버로드할 수 있습니다.

Java에서 String 객체를 생성하는 몇 가지 다른 방법은 무엇입니까?

new 연산자를 사용하여 String 개체를 만들거나 큰따옴표를 사용하여 String 개체를 만들 수 있습니다. 예를 들어:

String str = new String("abc");
String str1 = "abc";

String 클래스에는 char array, byte array, 에서 String을 얻기 위해 사용할 수 있는 여러 생성자가 있습니다. >StringBufferStringBuilder.

큰따옴표를 사용하여 String을 생성하면 JVM은 String 풀에서 다른 String이 동일한 값으로 저장되어 있는지 찾습니다. String이 이미 풀에 저장된 경우 JVM은 해당 String 개체에 대한 참조를 반환합니다. 새로운 String이 풀에 없으면 JVM은 주어진 값으로 새로운 String 객체를 생성하고 문자열 풀에 저장합니다. new 연산자를 사용하면 JVM이 String 개체를 생성하지만 문자열 풀에 저장하지 않습니다. intern() 메서드를 사용하여 String 개체를 문자열 풀에 저장하거나 동일한 값을 가진 String이 이미 있는 경우 참조를 반환할 수 있습니다. 풀에 존재합니다.

입력 문자열이 회문인지 확인하는 Java 메소드를 작성하십시오.

문자열을 뒤집었을 때 값이 같으면 문자열이 회문입니다. 예를 들어 aba는 회문 문자열입니다. String 클래스는 문자열을 반전시키는 방법을 제공하지 않지만 StringBufferStringBuilder 클래스에는 reverse() 문자열이 회문인지 여부를 확인하는 데 사용할 수 있는 메서드입니다. 예를 들어:

private static boolean isPalindrome(String str) {
    if (str == null)
        return false;
    StringBuilder strBuilder = new StringBuilder(str);
    strBuilder.reverse();
    return strBuilder.toString().equals(str);
}

때로는 면접관이 회문을 확인하기 위해 다른 클래스를 사용하지 말라고 요청할 수 있습니다. 이 경우 문자열의 양쪽 끝 문자를 비교하여 회문인지 확인할 수 있습니다. 예를 들어:

private static boolean isPalindromeString(String str) {
    if (str == null)
        return false;
    int length = str.length();
    System.out.println(length / 2);
    for (int i = 0; i < length / 2; i++) {
         if (str.charAt(i) != str.charAt(length - i - 1))
            return false;
    }
    return true;
}

문자열 객체에서 주어진 문자를 제거하는 Java 메소드를 작성하십시오.

replaceAll 메서드를 사용하여 문자열의 모든 항목을 다른 문자열로 바꿀 수 있습니다. 주목해야 할 중요한 점은 replaceAll()String을 인수로 허용하므로 Character 클래스를 사용하여 문자열을 만들고 사용할 수 있다는 것입니다. 모든 문자를 빈 문자열로 바꾸려면

private static String removeChar(String str, char c) {
    if (str == null)
        return null;
    return str.replaceAll(Character.toString(c), "");
}

Java에서 문자열을 대문자 또는 소문자로 어떻게 만들 수 있습니까?

String 클래스 toUpperCasetoLowerCase 메서드를 사용하여 모두 대문자 또는 소문자로 된 String 개체를 가져올 수 있습니다. . 이러한 메서드에는 Locale 인수를 받아들이고 주어진 로케일의 규칙을 사용하여 문자열을 대문자 또는 소문자로 변환하는 변형이 있습니다.

String subSequence 메서드란 무엇입니까?

Java 1.4는 CharSequence 인터페이스를 도입했으며 String 클래스는 이 인터페이스를 구현합니다. 이것이 String 클래스에 subSequence 가 있는 이유입니다. 방법. 내부적으로 subSequence 메서드는 String substring 메서드를 호출합니다.

Java 프로그램에서 두 문자열을 어떻게 비교합니까?

Java StringcompareTo() 메서드의 두 가지 변형이 있는 Comparable 인터페이스를 구현합니다. compareTo(String anotherString) 메서드는 String 개체를 사전순으로 전달된 String 인수와 비교합니다. String 개체가 전달된 인수 앞에 오는 경우 음의 정수를 반환하고 String 개체가 전달된 인수 뒤에 오는 경우 양의 정수를 반환합니다. 두 String 개체의 값이 같으면 0을 반환합니다. 이 경우 equals(String str) 메서드도 true를 반환합니다. compareToIgnoreCase(String str) 메서드는 대소문자를 무시한다는 점을 제외하면 첫 번째 메서드와 유사합니다. 대소문자를 구분하지 않는 비교를 위해 CASE_INSENSITIVE_ORDER와 함께 Comparator를 사용합니다. 값이 0이면 equalsIgnoreCase(String str)도 true를 반환합니다.

Java에서 문자열을 문자 배열로 어떻게 변환합니까?

String 개체는 일련의 문자이므로 단일 문자로 변환할 수 없습니다. charAt 메서드를 사용하여 주어진 인덱스에서 문자를 가져오거나 toCharArray() 메서드를 사용하여 문자열을 문자 배열로 변환할 수 있습니다. 문자열을 문자 배열로 변환하는 방법에 대해 자세히 알아보세요.

Java에서 문자열을 바이트 배열로 어떻게 변환합니까?

getBytes() 메서드를 사용하여 String 객체를 바이트 배열로 변환하고 new String(byte[] arr) 생성자를 사용할 수 있습니다. 바이트 배열을 String 개체로 변환합니다. 문자열을 바이트 배열로 변환하는 방법에 대해 자세히 알아보세요.

Java에서 스위치 케이스에 문자열을 사용할 수 있습니까?

Java 7은 케이스 전환 기능을 Strings로 확장했습니다. 이전 Java 버전은 이를 지원하지 않습니다. 문자열에 대한 조건부 흐름을 구현하는 경우 if-else 조건을 사용할 수 있고 Java 7 이상 버전을 사용하는 경우 switch case를 사용할 수 있습니다. 자바 스위치 대/소문자 문자열에 대해 자세히 알아보세요.

문자열의 모든 순열을 인쇄하는 Java 프로그램을 작성하십시오.

문자열의 모든 순열을 찾으려면 재귀를 사용해야 합니다. 예를 들어 AAB의 순열은 AAB, ABABAA입니다. 또한 Set을 사용하여 중복 값이 없는지 확인해야 합니다. 문자열의 모든 순열 찾기에 대해 자세히 알아보세요.

주어진 문자열에서 가장 긴 회문을 찾는 Java 함수를 작성하십시오.

문자열은 내부에 회문 하위 문자열을 포함할 수 있습니다. 문자열에서 가장 긴 회문 하위 문자열을 찾는 방법에 대해 자세히 알아보세요.

Java에서 String, StringBuffer 및 StringBuilder의 차이점은 무엇입니까?

String 객체는 Java에서 변경할 수 없고 최종적이므로 String 객체를 조작할 때마다 새로운 String 객체를 생성합니다. 문자열 조작은 리소스를 많이 사용하므로 Java는 문자열 조작을 위한 두 가지 유틸리티 클래스인 StringBufferStringBuilder를 제공합니다.

StringBufferStringBuilder는 변경 가능한 클래스입니다. StringBuffer 작업은 스레드로부터 안전하고 동기화되지만 StringBuilder 작업은 스레드로부터 안전하지 않습니다. 다중 스레드 환경에서는 StringBuffer를 사용하고 단일 스레드 환경에서는 StringBuilder를 사용해야 합니다. StringBuilder 성능은 동기화 오버헤드가 없기 때문에 StringBuffer보다 빠릅니다.

StringBuffer 및 StringBuilder에 대해 자세히 알아보세요.

Java에서 String이 불변인 이유는 무엇입니까?

String은 다음과 같은 몇 가지 이점을 제공하기 때문에 Java에서 변경할 수 없습니다.

  • 문자열은 Java에서 변경할 수 없기 때문에 문자열 풀이 가능합니다.
  • 해커가 값을 변경할 수 없고 데이터베이스 사용자 이름이나 비밀번호와 같은 민감한 정보를 저장하는 데 사용되기 때문에 보안이 강화됩니다.
  • String은 변경할 수 없기 때문에 멀티스레딩에서 사용하기에 안전하며 동기화가 필요하지 않습니다.
  • 문자열은 Java 클래스 로더에서 사용되며 불변성은 ClassLoader 클래스에 의해 올바른 클래스가 로드되고 있음을 보장합니다.

Java에서 String이 변경 불가능한 이유에 대해 자세히 알아보세요.

Java에서 문자열을 어떻게 분할합니까?

split(String regex)를 사용하여 제공된 정규식을 기반으로 StringString 배열로 분할할 수 있습니다.

Java에서 암호를 저장하기 위해 문자열보다 문자 배열이 선호되는 이유는 무엇입니까?

String 개체는 Java에서 변경할 수 없으며 문자열 풀에 저장됩니다. 일단 생성되면 가비지 수집이 완료될 때까지 풀에 남아 있으므로 암호를 입력해도 메모리에서 더 오랫동안 사용할 수 있습니다. 메모리 덤프에 액세스할 수 있는 사람은 누구나 암호를 일반 텍스트로 찾을 수 있기 때문에 보안 위험이 있습니다. 암호를 저장하기 위해 문자 배열을 사용하는 경우 작업이 끝나면 공백으로 설정할 수 있습니다. 메모리에서 사용 가능한 기간을 제어하고 보안 위협을 방지할 수 있습니다.

Java에서 두 문자열이 같은지 어떻게 확인합니까?

두 문자열이 같은지 확인하는 방법에는 두 가지가 있습니다. == 연산자 또는 equals() 메서드를 사용할 수 있습니다. == 연산자를 사용하면 String 값과 개체 참조를 확인합니다. Java 프로그래밍에서 종종 String 값이 같은지 확인하기를 원합니다. 이 경우 equals() 메서드를 사용하여 두 문자열이 같은지 확인해야 합니다. 대소문자를 무시하는 데 사용할 수 있는 equalsIgnoreCase라는 또 다른 함수가 있습니다.

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");

System.out.println("s1 == s2 ? " + (s1 == s2)); //true
System.out.println("s1 == s3 ? " + (s1 == s3)); //false
System.out.println("s1 equals s3 ? " + (s1.equals(s3))); //true

Java의 문자열 풀이란 무엇입니까?

문자열 풀은 Java 힙 메모리에 저장된 String 개체의 풀입니다. String은 Java의 특수 클래스이며 new 연산자를 사용하거나 큰따옴표로 값을 제공하여 String 객체를 생성할 수 있습니다. Java 문자열 풀에 대해 자세히 알아보세요.

Java String intern() 메서드는 무엇을 합니까?

intern() 메서드가 호출될 때 풀에 equals에 의해 결정된 이 String 개체와 동일한 String이 이미 포함된 경우 (Object) 메서드를 사용하면 풀의 문자열이 반환됩니다. 그렇지 않으면 이 String 개체가 풀에 추가되고 이 String 개체에 대한 참조가 반환됩니다. 이 메소드는 항상 이 String과 동일한 내용을 가지고 있지만 고유한 문자열 풀에서 온 것이 보장되는 String 객체를 반환합니다.

문자열은 Java에서 스레드로부터 안전합니까?

String 객체는 변경할 수 없으므로 생성 후 값을 변경할 수 없습니다. 이렇게 하면 String 개체가 스레드로부터 안전해지며 다중 스레드 환경에서 안전하게 사용할 수 있습니다. Java의 스레드 안전에 대해 자세히 알아보세요.

Java에서 String이 인기 있는 HashMap 키인 이유는 무엇입니까?

String 개체는 변경할 수 없기 때문에 해시 코드는 생성 시 캐시되며 다시 계산할 필요가 없습니다. 이것은 처리가 다른 HashMap 키 개체보다 빠르기 때문에 맵의 키에 대한 훌륭한 후보가 됩니다.

출력 추측

다음 Java 코드 스니펫의 출력을 추측하여 자신을 테스트하십시오.

public class StringTest {
    
  	public static void main(String[] args) {
   		String s1 = new String("digitalocean");
   		String s2 = new String("DIGITALOCEAN");
   		System.out.println(s1 = s2);
   	}
    
}
DIGITALOCEAN

코드가 String s2의 값을 String s1에 할당하기 때문에 출력은 DIGITAOCEAN입니다. =y의 값을 (x = y) 형식으로 x에 할당하는 할당 연산자입니다. ==는 참조 개체가 두 문자열에 대해 동일한지 확인하는 비교 연산자입니다.

public class Test {
    
   	 public void foo(String s) {
   	 System.out.println("String");
   	 }
    
   	 public void foo(StringBuffer sb) {
   	 System.out.println("StringBuffer");
   	 }
    
   	 public static void main(String[] args) {
   		new Test().foo(null);
   	}
    
}
Test.java:12: error: reference to foo is ambiguous
   		new Test().foo(null);
   		           ^
  both method foo(String) in Test and method foo(StringBuffer) in Test match

이 코드는 두 foo 메서드의 이름이 같고 mainfoo 메서드에 대한 호출이 를 전달하기 때문에 컴파일 시간 오류가 발생합니다. >널. 컴파일러는 호출할 메서드를 모릅니다. Y 유형 오류에 대해 X is ambiguous 방법을 참조할 수도 있습니다.

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);
false

출력은 false입니다. 코드가 new 연산자를 사용하여 String 객체를 생성하므로 힙 메모리에 생성되고 s1 s2는 다른 참조를 갖습니다. 큰따옴표만 사용하여 문자열을 생성하면 문자열 풀에 포함되고 true가 인쇄됩니다.

String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
false

s2String 유형이 아니기 때문에 출력은 false입니다. String 클래스의 equals() 메서드 구현에는 전달된 개체의 유형이 String인지 확인하는 instanceof 연산자가 있습니다. 개체가 String이 아니면 false를 반환합니다.

String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);
false

출력은 false입니다. intern() 메서드는 문자열 풀에서 String 개체 참조를 반환합니다. 그러나 코드는 이를 s2에 다시 할당하지 않으며 s2s1s2 에 변경 사항이 없습니다. 에는 다른 개체 참조가 있습니다. 3행의 코드를 s2 = s2.intern();으로 변경하면 출력은 true가 됩니다.

다음 코드에 의해 얼마나 많은 String 객체가 생성됩니까?

String s1 = new String("Hello");  
String s2 = new String("Hello");

답은 세 가지입니다. 1행의 코드는 문자열 풀(첫 번째 개체)에 값이 HelloString 개체를 만든 다음 다음을 사용하여 새 String 개체를 만듭니다. 힙 메모리의 Hello 값(두 번째 객체). 2행의 코드는 힙 메모리(세 번째 객체)에 값이 Hello인 새 String 객체를 생성하고 문자열에서 Hello 문자열을 재사용합니다. 수영장.

결론

이 기사에서는 특히 String에 대한 몇 가지 Java 인터뷰 질문을 검토했습니다.

권장 읽기:

자바 프로그래밍 질문