Quiz sur les Chaînes Java

Bienvenue au Quiz des Chaînes de Caractères en Java. La chaîne de caractères est l’une des classes les plus importantes en Java. Si vous avez déjà programmé en Java, vous l’avez sûrement utilisée.

La chaîne de caractères est très populaire lorsqu’il s’agit de questions d’entretien ou de quiz en Java. J’ai donc rassemblé quelques questions de quiz Java sur les chaînes intéressantes et difficiles que vous devriez essayer.

Quiz des Chaînes de Caractères en Java

Il y a 21 questions dans ce quiz. Si vous pouvez répondre correctement à 15 questions ou plus, alors considérez-vous vraiment bon en concepts de chaîne de caractères. Vous pouvez vérifier la réponse et l’explication détaillée en cliquant sur le bouton « Révéler la réponse » après chaque question.

Commençons le Quiz des Chaînes de Caractères et bonne chance.

1. Quel sera le résultat des déclarations ci-dessous ?

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

**Réponse Correcte: B
**
Cela lancera une exception à l’exécution.Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16 C’est parce que la valeur de l’index commence à partir de 0.

2. Quel sera le résultat des déclarations ci-dessous ?

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

**Réponse Correcte: B
**
Cela lancera une exception à l’exécution avec le message d’erreur suivant Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16. C’est parce que l’indice de fin est plus petit que l’indice de début.

3. Sélectionnez toutes les méthodes valides de la classe String.

A. trim()
B. intern()
C. toLower()
D. split()

Click to Reveal Answer

Réponse Correcte: A, B

Les méthodes valides de la classe String sont – trim(), intern(), toLowerCase(), et split(String regex).

4. Quel sera le résultat des déclarations ci-dessous ?

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

**Réponse correcte : A
**
Lorsque nous utilisons des guillemets doubles pour créer une chaîne, elle cherche d’abord une chaîne avec la même valeur dans le pool de chaînes. Si elle la trouve, elle renvoie la référence, sinon elle crée une nouvelle chaîne dans le pool et renvoie ensuite la référence.

Cependant, en utilisant le nouvel opérateur, nous forçons la classe String à créer un nouvel objet String dans l’espace de la pile. Ainsi, s1 et s2 auront une référence à la même chaîne dans le pool, tandis que s3 sera un objet différent en dehors du pool, d’où le résultat.

5. Lesquelles des affirmations suivantes sont vraies pour la chaîne dans le cas de la commutation ?

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.

Click to Reveal Answer

Réponse correcte : B, C

Lisez-en plus à java switch case string

6. Lesquelles des affirmations suivantes sont vraies pour StringBuffer et 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

Réponse correcte : A, B

L’objet StringBuffer est sûr pour les threads car ses méthodes sont synchronisées. Mais c’est un surcoût dans la plupart des cas, c’est pourquoi StringBuilder a été introduit dans Java 1.5. StringBuilder n’est pas sécurisé pour les threads. StringBuffer et StringBuilder sont des classes mutables. Lisez-en plus à String vs StringBuffer vs StringBuilder.

7. L’implémentation de String suit quel modèle de conception parmi les suivants ?

A. Flyweight Design Pattern
B. Factory Pattern
C. Singleton Pattern
D. None of the above

Click to Reveal Answer

Réponse correcte : A

Implémentation de la piscine de chaînes suit le modèle de conception flyweight.

8. Quel sera le résultat des déclarations ci-dessous?

String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));

A. 0
B. true
C. -3
D. false

Click to Reveal Answer

**Réponse Correcte: C
**
**
À partir de la documentation de la méthode compareTo() de la classe String:

La méthode compareTo compare deux chaînes de manière lexicographique. La comparaison est basée sur la valeur Unicode de chaque caractère dans les chaînes. La séquence de caractères représentée par cet objet String est comparée lexicographiquement à la séquence de caractères représentée par la chaîne argument. Le résultat est un entier négatif si cet objet String précède lexicographiquement la chaîne argument. Le résultat est un entier positif si cet objet String suit lexicographiquement la chaîne argument. Le résultat est zéro si les chaînes sont égales; compareTo retourne 0 exactement lorsque la méthode equals(Object) retournerait true.

Ceci est la définition de l’ordre lexicographique. Si deux chaînes sont différentes, alors elles ont soit des caractères différents à un certain index qui est un index valide pour les deux chaînes, soit leurs longueurs sont différentes, soit les deux. S’ils ont des caractères différents à une ou plusieurs positions d’index, soit k est le plus petit tel index; alors la chaîne dont le caractère à la position k a la plus petite valeur, telle que déterminée en utilisant l’opérateur <, précède lexicographiquement l’autre chaîne. Dans ce cas, compareTo retourne la différence des deux valeurs de caractère à la position k dans les deux chaînes – c’est-à-dire, la valeur:

this.charAt(k)-anotherString.charAt(k)

Dans notre exemple, « abc » précède « def », donc un entier négatif est renvoyé. Ensuite, l’indice le plus bas avec un caractère différent est 0 et a-d équivaut à -3.

9. Quelle sera la sortie du programme ci-dessous?

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

Réponse correcte: A

La commande x.concat(y) créera une nouvelle chaîne mais elle n’est pas affectée à x, donc la valeur de x n’est pas modifiée.

10. Quelle sera la sortie des instructions ci-dessous?

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

Réponse correcte: A

La sortie des instructions données sera « false » car en Java, l’opérateur + a une précédence plus élevée que l’opérateur ==. Donc l’expression donnée sera évaluée à « s1 == s2 est:abc » == « abc », c’est-à-dire false.

11. Quelle sera la sortie des instructions ci-dessous?

String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);

A. Java3Quiz7
B. Java12Quiz7
C. Java12Quiz34
D. Java3Quiz34

Click to Reveal Answer

Réponse correcte: B

Tout d’abord, l’expression entre parenthèses est exécutée. Ensuite, tous les opérateurs + sont exécutés de gauche à droite.

Nous obtenons une chaîne à chaque concaténation, donc la sortie est produite comme indiqué ci-dessous.

« Java »+1+2+ »Quiz »+ » »+(3+4)
= « Java »+1+2+ »Quiz »+ » »+7
= « Java1″+2+ »Quiz »+ » »+7
= « Java12″+ »Quiz »+ » »+7
= « Java12Quiz »+ » »+7
= « Java12Quiz »+7
= « Java12Quiz7 »

12. Combien d’objets String sont créés dans les instructions ci-dessous?

String s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2

A. 1
B. 2
C. 3
D. 4

Click to Reveal Answer

Réponse correcte: C

Dans l’instruction 1, « abc » est créé dans le pool de chaînes.

Dans l’énoncé 2, tout d’abord « abcd » est créé dans le pool de chaînes. Ensuite, il est passé en argument à l’opérateur new de String et une autre chaîne est créée dans la mémoire heap.

Un total de 3 objets chaînes sont donc créés.

13. Quel sera le résultat des instructions ci-dessous ?

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

Réponse correcte : A

La chaîne s1 est dans le pool de chaînes alors que s2 est créée dans la mémoire heap.

Par conséquent, s1==s2 renverra false.

Quand la méthode s2.intern() est appelée, elle vérifie s’il y a une chaîne avec la valeur « abc » dans le pool. Elle renvoie donc la référence de s1. Ainsi, s1 et s2 pointent maintenant vers la même instance de chaîne.

Par conséquent, s1==s2.intern() renverra true.

14. Sélectionnez toutes les interfaces implémentées par la classe String.

A. Serializable
B. Comparable
C. Constable
D. Cloneable

Click to Reveal Answer

Réponse correcte : A, B, C

String est sérialisable et comparable. Constable est une nouvelle interface de la version Java 12.

15. Sélectionnez toutes les raisons qui font de String un candidat parfait pour la clé Map.

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

**Réponse correcte : A, B, C
**
L’implémentation appropriée des méthodes hashCode() et equals() est indispensable pour une clé Map. Comme la chaîne est finale et immuable, il n’y a aucune chance de corruption des données de la clé.

16. Quel sera le résultat du fragment de code ci-dessous ?

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

**Réponse correcte : A
**
Il affichera « JAVA » parce que l’argument à l’intérieur de la méthode println() est une affectation. Il sera donc traité comme System.out.println("JAVA").

17. Quel sera le résultat des instructions ci-dessous ?

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

Réponse correcte : A

Il affichera faux car s2 n’est pas de type String. Si vous regardez l’implémentation de la méthode equals() de la classe String, vous trouverez une vérification utilisant l’opérateur instanceof pour vérifier si le type de l’objet passé est String. Sinon, il renvoie faux.

18. Quel sera le résultat du code ci-dessous?

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

Réponse correcte : A

C’est une question piège et la sortie sera fausse. Nous savons que la méthode intern() renverra la référence d’objet String depuis le pool de chaînes, mais comme nous ne l’avons pas assignée à s2, il n’y a aucun changement dans s2. Par conséquent, s1 et s2 ont des références différentes.

Si nous changeons le code à la ligne 3 pour s2 = s2.intern();, alors la sortie sera vraie.

19. Sélectionnez toutes les classes qui étendent la classe String.

A. StringBuffer
B. StringBuilder
C. StringWriter
D. None

Click to Reveal Answer

**Réponse correcte : D
**
C’est une question piège. La classe String est une classe finale, donc vous ne pouvez pas l’étendre.

20. Lesquelles des déclarations suivantes sont vraies à propos de String en java?

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

Réponse correcte : C, D, E

Nous ne pouvons pas étendre la classe String car elle est finale. StringBuffer ne l’étend pas. La classe String est définie dans le package java.lang. La chaîne est immuable et donc sécurisée pour les threads en java. La chaîne est sensible à la casse, donc « abc » n’est pas égal à « ABC ».

21. Quel sera le résultat des déclarations suivantes?

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

Réponse correcte : B

La ligne 2 affichera null car la méthode print a une vérification de null comme ceci:

if (s == null) { s = "null";}

La ligne 3 lancera une NullPointerException car nous essayons d’appeler la fonction toString() sur null.

Conclusion

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