Java-String-Interviewfragen und Antworten

Einführung

String ist eine der am weitesten verbreiteten Java-Klassen. Dieser Artikel bietet einige Übungsfragen und Antworten zu String, um Ihnen bei der Vorbereitung auf ein Vorstellungsgespräch zu helfen.

Sie können auch das Java String Quiz ausprobieren, um Ihr Wissen über die String-Klasse zu testen.

Was ist die String-Klasse in Java? Ist String ein Datentyp?

String ist eine Klasse in Java und ist im Paket java.lang definiert. Es ist kein primitiver Datentyp wie int und long. Die Klasse String repräsentiert Zeichenfolgen. String wird in fast allen Java-Anwendungen verwendet. String ist in Java unveränderlich und final, und der JVM verwendet einen String-Pool, um alle String-Objekte zu speichern. Sie können ein String-Objekt mit doppelten Anführungszeichen instanziieren, und Sie können den +-Operator für die Verkettung überladen.

Was sind einige verschiedene Möglichkeiten, ein String-Objekt in Java zu erstellen?

Sie können ein String-Objekt mit dem new-Operator erstellen oder Sie können doppelte Anführungszeichen verwenden, um ein String-Objekt zu erstellen. Zum Beispiel:

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

Es gibt mehrere Konstruktoren in der String-Klasse, um einen String aus einem char-Array, einem Byte-Array, einem StringBuffer und einem StringBuilder zu erhalten.

Wenn Sie einen String mit doppelten Anführungszeichen erstellen, sucht die JVM im String-Pool nach einem anderen String, der denselben Wert hat. Wenn der String bereits im Pool gespeichert ist, gibt die JVM den Verweis auf dieses String-Objekt zurück. Wenn der neue String nicht im Pool ist, erstellt die JVM ein neues String-Objekt mit dem angegebenen Wert und speichert es im String-Pool. Wenn Sie den new-Operator verwenden, erstellt die JVM das String-Objekt, speichert es jedoch nicht im String-Pool. Sie können die intern()-Methode verwenden, um das String-Objekt im String-Pool zu speichern oder den Verweis zurückzugeben, wenn bereits ein String mit gleichem Wert im Pool vorhanden ist.

Schreiben Sie eine Java-Methode, um zu überprüfen, ob ein Eingabestring ein Palindrom ist.

A string is a palindrome if its value is the same when reversed. For example, aba is a palindrome string. The String class doesn’t provide any method to reverse the string but the StringBuffer and StringBuilder classes have a reverse() method that you can use to check whether a string is a palindrome. For example:

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

Manchmal kann ein Interviewer verlangen, dass Sie keine andere Klasse verwenden, um ein Palindrom zu überprüfen. In diesem Fall können Sie Zeichen im String von beiden Enden vergleichen, um herauszufinden, ob es sich um ein Palindrom handelt. Zum Beispiel:

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;
}

Schreiben Sie eine Java-Methode, die ein bestimmtes Zeichen aus einem Stringobjekt entfernt.

Wir können die Methode replaceAll verwenden, um alle Vorkommen eines Strings durch einen anderen String zu ersetzen. Der wichtige Punkt ist, dass replaceAll() einen String als Argument akzeptiert. Sie können also die Klasse Character verwenden, um einen String zu erstellen und ihn verwenden, um alle Zeichen durch einen leeren String zu ersetzen.

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

Wie kann man einen String in Java in Großbuchstaben oder Kleinbuchstaben umwandeln?

Sie können die String-Klasse verwenden, um die Methoden toUpperCase und toLowerCase aufzurufen, um das String-Objekt in Groß- oder Kleinbuchstaben zu erhalten. Diese Methoden haben eine Variante, die ein Locale-Argument akzeptiert und die Regeln des angegebenen Gebiets festlegt, um den String in Groß- oder Kleinbuchstaben umzuwandeln.

Was ist die Methode String subSequence?

Java 1.4 hat das CharSequence-Interface eingeführt, und die String-Klasse implementiert dieses Interface. Deshalb hat die String-Klasse die subSequence-Methode. Intern ruft die subSequence-Methode intern die String substring-Methode auf.

Wie vergleichen Sie zwei Strings in einem Java-Programm?

Java String implementiert das Comparable-Interface, das zwei Varianten der Methode compareTo() hat. Die Methode compareTo(String anotherString) vergleicht das String-Objekt lexicographisch mit dem übergebenen String-Argument. Wenn das String-Objekt dem übergebenen Argument vorausgeht, gibt es eine negative Ganzzahl zurück, und wenn das String-Objekt dem übergebenen Argument folgt, gibt es eine positive Ganzzahl zurück. Es gibt null zurück, wenn beide String-Objekte den gleichen Wert haben. In diesem Fall gibt auch die Methode equals(String str) true zurück. Die Methode compareToIgnoreCase(String str) ist der ersten ähnlich, außer dass sie die Groß- und Kleinschreibung ignoriert. Sie verwendet Comparator mit CASE_INSENSITIVE_ORDER für den Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung. Wenn der Wert null ist, gibt equalsIgnoreCase(String str) ebenfalls true zurück.

Wie konvertiert man in Java einen String in ein Zeichenarray?

A String object is a sequence of characters, so you can’t convert it to a single character. You can use use the charAt method to get the character at given index or you can use the toCharArray() method to convert a string to character array. Learn more about converting a string to a character array.

Wie konvertiert man in Java einen String in ein Byte-Array?

Sie können die getBytes()-Methode verwenden, um ein String-Objekt in ein Byte-Array umzuwandeln, und Sie können den Konstruktor new String(byte[] arr) verwenden, um ein Byte-Array in ein String-Objekt umzuwandeln. Erfahren Sie mehr über die Umwandlung eines Strings in ein Byte-Array.

Können Sie String in einem Switch-Case in Java verwenden?

Java 7 hat die Fähigkeit von Switch-Case auf Strings erweitert; frühere Java-Versionen unterstützen dies nicht. Wenn Sie bedingte Flusssteuerungen für Strings implementieren, können Sie if-else-Bedingungen verwenden, und Sie können Switch-Case verwenden, wenn Sie Java 7 oder höhere Versionen verwenden. Erfahren Sie mehr über Java-Switch-Case-String.

Schreiben Sie ein Java-Programm, um alle Permutationen eines Strings zu drucken.

Sie müssen Rekursion verwenden, um alle Permutationen einer Zeichenkette zu finden. Zum Beispiel sind die Permutationen von AAB AAB, ABA und BAA. Sie müssen auch Set verwenden, um sicherzustellen, dass keine doppelten Werte vorhanden sind. Erfahren Sie mehr über das Finden aller Permutationen einer Zeichenkette.

Schreiben Sie eine Java-Funktion, um das längste Palindrom in einer gegebenen Zeichenkette zu finden.

A string can contain palindrome substrings within it. Learn more about how to find the longest palindrome substring in a string.

Was sind die Unterschiede zwischen String, StringBuffer und StringBuilder in Java?

A String object is immutable and final in Java, so whenever you manipulate a String object, it creates a new String object. String manipulations are resource consuming, so Java provides two utility classes for string manipulations, StringBuffer and StringBuilder.

StringBuffer und StringBuilder sind veränderbare Klassen. Die Operationen von StringBuffer sind threadsicher und synchronisiert, während die Operationen von StringBuilder nicht threadsicher sind. In einer Mehrfadenumgebung sollte StringBuffer verwendet werden, während in einer Einzelfadenumgebung StringBuilder bevorzugt wird. Die Leistung von StringBuilder ist aufgrund des fehlenden Synchronisationsaufwands schneller als die von StringBuffer.

Erfahren Sie mehr über die Unterschiede zwischen String, StringBuffer und StringBuilder sowie über das Benchmarking von StringBuffer und StringBuilder.

Warum ist String in Java unveränderlich?

String ist in Java unveränderlich, da dies mehrere Vorteile bietet:

  • Der String-Pool ist möglich, weil String in Java unveränderlich ist.
  • Es erhöht die Sicherheit, da ein Hacker seinen Wert nicht ändern kann, und er wird zum Speichern sensibler Informationen wie eines Datenbankbenutzernamens oder -passworts verwendet.
  • Aufgrund der Unveränderlichkeit von String ist er sicher in der Mehrfadenverarbeitung und erfordert keine Synchronisation.
  • Zeichenfolgen werden in Java-Klassenladern verwendet und Unveränderlichkeit stellt sicher, dass die richtige Klasse durch die Klasse ClassLoader geladen wird.

Erfahren Sie mehr darüber, warum String in Java unveränderlich ist.

Wie teilt man einen String in Java auf?

Sie können split(String regex) verwenden, um den String basierend auf dem angegebenen regulären Ausdruck in ein String-Array aufzuteilen.

Warum wird in Java ein Zeichenarray bevorzugt, um Passwörter zu speichern?

A String object is immutable in Java and is stored in the string pool. Once it’s created it stays in the pool until garbage collection completes, so even though you’re done with the password it’s available in memory for longer duration. It’s a security risk because anyone having access to memory dump can find the password as clear text. If you use a character array to store password, you can set it to blank once you’re done with it. You can control for how long it’s available in memory and that avoids the security threat.

Wie überprüft man, ob zwei Strings in Java gleich sind?

Es gibt zwei Möglichkeiten, um festzustellen, ob zwei Strings gleich sind. Sie können den ==-Operator oder die equals()-Methode verwenden. Wenn Sie den ==-Operator verwenden, überprüft er den Wert des String sowie die Objektreferenz. Oft möchten Sie in der Java-Programmierung nur die Gleichheit des String-Werts überprüfen. In diesem Fall sollten Sie die equals()-Methode verwenden, um festzustellen, ob zwei Strings gleich sind. Es gibt eine weitere Funktion namens equalsIgnoreCase, die Sie verwenden können, um die Groß-/Kleinschreibung zu ignorieren.

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

Was ist der String-Pool in Java?

Der String-Pool ist ein Pool von String-Objekten, die im Java-Heap-Speicher gespeichert sind. String ist eine spezielle Klasse in Java, und Sie können ein String-Objekt sowohl mit dem new-Operator als auch durch Bereitstellen von Werten in doppelten Anführungszeichen erstellen. Erfahren Sie mehr über den Java-String-Pool.

Was macht die Java-Methode String intern()?

Wenn die Methode intern() aufgerufen wird und der Pool bereits eine String enthält, die diesem String-Objekt entspricht, wie durch die Methode equals(Object) bestimmt, wird der String aus dem Pool zurückgegeben. Andernfalls wird dieses String-Objekt dem Pool hinzugefügt und eine Referenz auf dieses String-Objekt zurückgegeben. Diese Methode gibt immer ein String-Objekt zurück, das den gleichen Inhalt wie dieser String hat, aber garantiert aus einem Pool einzigartiger Zeichenfolgen stammt.

Ist String in Java thread-sicher?

A String object is immutable, so you can’t change its value after creation. This makes the String object thread-safe and so it can be safely used in a multi-threaded environment. Learn more about thread Safety in Java.

Da ein String-Objekt unveränderlich ist, wird sein Hashcode zum Zeitpunkt der Erstellung zwischengespeichert und muss nicht erneut berechnet werden. Das macht es zu einem hervorragenden Kandidaten für den Schlüssel in einer Map, da die Verarbeitung schneller ist als bei anderen Schlüsselobjekten von HashMap.

Vermutete Ausgabe

Testen Sie sich selbst, indem Sie die Ausgabe der folgenden Java-Code-Schnipsel erraten.

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

Die Ausgabe ist DIGITALOCEAN, weil der Code den Wert von String s2 der Variable String s1 zuweist. = ist ein Zuweisungsoperator, der den Wert von y im Format (x = y) der Variable x zuweist. == ist ein Vergleichsoperator, der überprüfen würde, ob das Referenzobjekt für die beiden Strings identisch ist.


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);
   	}
    
}
Output
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

Dieser Code führt zu einem Kompilierungsfehler, da beide foo-Methoden denselben Namen haben und der Aufruf der foo-Methode in main null übergibt. Der Compiler weiß nicht, welche Methode aufgerufen werden soll. Sie können auch auf den Fehler „Methode X ist mehrdeutig für den Typ Y“ verweisen.


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

Die Ausgabe ist false, weil der Code den new-Operator verwendet, um das String-Objekt zu erstellen. Daher wird es im Heap-Speicher erstellt, und s1 und s2 haben unterschiedliche Referenzen. Wenn Sie die Zeichenketten nur mit doppelten Anführungszeichen erstellen, befinden sie sich im Zeichenkettenpool, und es wird true gedruckt.


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

Die Ausgabe ist false, weil s2 nicht vom Typ String ist. Die Implementierung der equals()-Methode in der String-Klasse verwendet den instanceof-Operator, um zu überprüfen, ob der übergebene Objekttyp String ist, und gibt false zurück, wenn das Objekt nicht vom Typ String ist.


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

Die Ausgabe ist false. Die Methode intern() gibt die Referenz des String-Objekts aus dem Zeichenkettenpool zurück. Der Code weist es jedoch nicht s2 zu, und es gibt keine Änderung in s2, sodass s1 und s2 unterschiedliche Objektreferenzen haben. Wenn Sie den Code in Zeile 3 zu s2 = s2.intern(); ändern, lautet die Ausgabe true.

Wie viele String-Objekte werden durch den folgenden Code erstellt?

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

Die Antwort lautet drei. Der Code in Zeile 1 erstellt ein String-Objekt mit dem Wert Hello im String-Pool (erstes Objekt) und erstellt dann ein neues String-Objekt mit dem Wert Hello im Heap-Speicher (zweites Objekt). Der Code in Zeile 2 erstellt ein neues String-Objekt mit dem Wert Hello im Heap-Speicher (drittes Objekt) und verwendet den Hello-String aus dem String-Pool erneut.

Fazit

In diesem Artikel wurden einige Java-Interviewfragen speziell zu String behandelt.

Empfohlene Lektüre:

Java-Programmierfragen
String-Programme in Java

Source:
https://www.digitalocean.com/community/tutorials/java-string-interview-questions-and-answers