1. Pourquoi les objets String sont-ils immuables en Java ?
✅ Les objets String sont immuables pour plusieurs raisons :
Sécurité : Empêche la modification accidentelle des valeurs (utile pour les clés de
hachage, URLs, etc.).
Performance : Optimisation via le String Pool.
Thread-safety : Évite les problèmes de concurrence.
2. Quelle est la différence entre == et .equals() pour comparer des String ?
✅ == compare les références en mémoire, alors que .equals() compare le contenu des chaînes.
String s1 = new String("hello");
String s2 = new String("hello");
[Link](s1 == s2); // false (références différentes)
[Link]([Link](s2)); // true (contenu identique)
3. Quelle est la différence entre String, StringBuilder et StringBuffer ?
String : Immuable, toute modification crée un nouvel objet.
StringBuilder : Modifiable (mutable), performant mais non thread-safe.
StringBuffer : Comme StringBuilder, mais thread-safe (synchrone, donc plus lent).
StringBuilder sb = new StringBuilder("Hello");
[Link](" World"); // Modifie directement sb sans créer un nouvel objet
4. Comment inverser une String en Java ?
✅ Utiliser StringBuilder ou une boucle :
String str = "Java";
String reversed = new StringBuilder(str).reverse().toString();
[Link](reversed); // "avaJ"
5. Que fait trim() sur une String ?
✅ Supprime les espaces de début et de fin.
String s = " Java ";
[Link]([Link]()); // "Java"
6. Que retourne "hello".equalsIgnoreCase("HELLO") ?
✅ true, car la comparaison ignore la casse.
7. Comment extraire une sous-chaîne en Java ?
✅ Utiliser substring(start, end).
String str = "JavaSpring";
[Link]([Link](4, 10)); // "Spring"
8. Que fait [Link]("-", "Java", "Spring", "Angular") ?
✅ Retourne "Java-Spring-Angular" (concaténation avec un séparateur).
9. Comment diviser une String ?
✅ Utiliser .split(regex).
String data = "Java,Spring,Angular";
String[] parts = [Link](",");
[Link]([Link](parts)); // ["Java", "Spring", "Angular"]
10. Comment convertir un int en String et vice-versa ?
int → String : [Link](int) ou [Link](int).
String → int : [Link](String).
int number = 42;
String str = [Link](number); // "42"
int num = [Link](str); // 42
11. Quelle est la différence entre matches(), contains() et startsWith() ?
✅
.matches(regex): Vérifie si la chaîne correspond à une regex.
.contains(substring): Vérifie si la chaîne contient une sous-chaîne.
.startsWith(prefix): Vérifie si la chaîne commence par un préfixe.
String str = "Hello Java";
[Link]([Link](".*Java.*")); // true
[Link]([Link]("Java")); // true
[Link]([Link]("Hello")); // true
12. Que retourne "abc".substring(0, 2) ?
✅ "ab" (les caractères aux index 0 et 1, excluant 2).
13. Comment vérifier si une String contient uniquement des chiffres ?
✅ Utiliser une expression régulière :
String str = "12345";
boolean isNumeric = [Link]("\\d+");
[Link](isNumeric); // true
14. Comment formater une String en Java ?
✅ Utiliser [Link]().
String name = "Java";
int version = 17;
String formatted = [Link]("Langage: %s, Version: %d", name, version);
[Link](formatted); // "Langage: Java, Version: 17"
QA
Dans Java 11, quelle méthode a été ajoutée à la classe String pour simplifier
la gestion des lignes dans les fichiers ?
A) lines()
Question 3 (Java 17)
Quel est le but principal de l'enregistrement (record) en Java 17 ?
A) Créer des objets immutables et concis avec un code plus réduit
public record Person(String name, int age) {}
Question 4 (Java 21)
Avec Java 21, quelle nouvelle fonctionnalité a été introduite dans le langage ?
A) Virtual Threads pour améliorer la gestion de la concurrence.
1️⃣ Why are Strings immutable in Java?
Answer: Strings are immutable to enhance security, ensure thread safety, and allow
memory optimization by reusing objects in the string pool.
2️⃣ What’s the difference between == and equals() for Strings?
Answer:
== compares references (memory locations).
equals() compares the content of the strings.
Example:
String s1 = new String("Java");
String s2 = new String("Java");
[Link](s1 == s2); // false
[Link]([Link](s2)); // true
3️⃣ How does the String pool improve memory efficiency?
Answer: The string pool stores string literals. When a new literal is created, Java checks
the pool and reuses it if it already exists, saving memory.
Example:
String s1 = "Java";
String s2 = "Java";
[Link](s1 == s2); // true (same object in the pool)
4️⃣ Can Strings be used as keys in a HashMap? Why?
Answer: Yes, Strings are immutable. Their hashCode doesn’t change after creation,
ensuring consistent key behavior in hash-based collections.
5️⃣ How do you reverse a String in Java?
Answer: Use StringBuilder like this:
String str = "Java";
String reversed = new StringBuilder(str).reverse().toString();
[Link](reversed); // "avaJ"
Quiz :
String s1 = "Java";
String s2 = new String("Java");
[Link](s1 == s2);
Bonne réponse : false
Explication :
s1 est stocké dans le String Pool.
s2 est un nouvel objet String, stocké en dehors du String Pool (car créé avec new
String()).
== compare les références mémoire, qui sont différentes.
👉 Si on voulait comparer le contenu, il faudrait utiliser .equals().
Quel est le résultat de ce code ?
String str = "Java123";
[Link]([Link]("[A-Za-z]+"));
Bonne réponse : B) false
Explication :
La méthode matches() vérifie si la chaîne correspond complètement à l'expression régulière
donnée.
Dans le code :
String str = "Java123";
[Link]([Link]("[A-Za-z]+"));
L'expression régulière [A-Za-z]+ signifie une ou plusieurs lettres (minuscules ou
majuscules).
Cependant, "Java123" contient des chiffres (123), donc elle ne correspond pas à l'expression
régulière et retourne false.
La méthode [Link]() est polyvalente. Elle peut être utilisée pour convertir différents
types d'objets en chaînes de caractères. Par exemple :
Si vous passez un entier (comme int), elle le convertira en chaîne.
Si vous passez un objet, elle appellera sa méthode toString() pour obtenir sa
représentation sous forme de chaîne.
Exemples :
int num = 123;
String str = [Link](num); // "123"
Object obj = new Object();
String objStr = [Link](obj); // Appelle [Link]()
Que fait la méthode charAt(int index) dans la classe String ?
Retourne le caractère à l'index spécifié dans la chaîne.
Explication :
La méthode charAt(int index) retourne le caractère à l'index spécifié dans la chaîne de
caractères.
String str = "Java";
char ch = [Link](2); // 'v' (l'index 2 correspond à la lettre "v")
[Link](ch); // Affiche "v"