Quiz sulle Stringhe Java

Benvenuti al quiz su String in Java. String è una delle classi più importanti in Java. Se avete fatto della programmazione in Java, sicuramente l’avrete utilizzata.

La stringa è molto popolare quando si tratta di domande o quiz di intervista in Java. Ho raccolto alcune ottime e trabocchetto domande di quiz su stringhe in Java che dovreste provare.

Quiz su String in Java

In questo quiz ci sono 21 domande. Se riuscite a rispondere correttamente a 15 o più domande, consideratevi davvero esperti nel concetto di String. Potete controllare la risposta e una spiegazione dettagliata cliccando sul pulsante “Rivelare la risposta” dopo ogni domanda.

Iniziamo il Quiz su String e buona fortuna.

1. Qual sarà l’output dei seguenti statement?

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

**Risposta Corretta: B
**
Lancerà l’eccezione in fase di esecuzione.Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16 Questo perché l’indice inizia da 0.

2. Qual sarà l’output dei seguenti statement?

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

**Risposta Corretta: B
**
Lancerà l’eccezione in fase di esecuzione con il messaggio di errore Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16. Questo perché l’indice di fine è inferiore all’indice di inizio.

3. Seleziona tutti i metodi validi della classe String.

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

Click to Reveal Answer

Risposta Corretta: A, B

I metodi validi della classe String sono – trim(), intern(), toLowerCase() e split(String regex).

4. Qual sarà l’output delle seguenti istruzioni?

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

**Risposta corretta: A
**
Quando utilizziamo le virgolette doppie per creare una stringa, viene prima cercata una stringa con lo stesso valore nel pool di stringhe. Se viene trovata, viene restituito il riferimento; altrimenti viene creata una nuova stringa nel pool e quindi viene restituito il riferimento.

Tuttavia, utilizzando l’operatore new, forziamo la classe String a creare un nuovo oggetto String nello spazio heap. Quindi s1 e s2 avranno il riferimento alla stessa stringa nel pool, mentre s3 sarà un oggetto diverso al di fuori del pool, da qui l’output.

5. Quali delle seguenti affermazioni sono vere per una stringa in un caso switch?

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

Risposta corretta: B, C

Leggi di più su java switch case string

6. Quali delle seguenti affermazioni sono vere per StringBuffer e 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

Risposta corretta: A, B

L’oggetto StringBuffer è thread-safe perché i suoi metodi sono sincronizzati. Ma questo è un sovraccarico nella maggior parte dei casi, quindi è stato introdotto StringBuilder in Java 1.5. StringBuilder non è thread-safe. StringBuffer e StringBuilder sono classi mutevoli. Leggi di più su String vs StringBuffer vs StringBuilder.

7. L’implementazione della stringa segue quale dei seguenti pattern di progettazione?

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

Click to Reveal Answer

Risposta corretta: A

Implementazione del pool di stringhe segue il modello di progettazione flyweight.

8. Qual sarà l’output delle seguenti istruzioni?

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

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

Click to Reveal Answer

**Risposta Corretta: C
**
**
Dalla documentazione del metodo compareTo() di String:

Il metodo compareTo confronta due stringhe lessicograficamente. La comparazione si basa sul valore Unicode di ogni carattere nelle stringhe. La sequenza di caratteri rappresentata da questo oggetto String viene confrontata lessicograficamente con la sequenza di caratteri rappresentata dalla stringa di argomento. Il risultato è un numero intero negativo se questo oggetto String precede lessicograficamente la stringa di argomento. Il risultato è un numero intero positivo se questo oggetto String segue lessicograficamente la stringa di argomento. Il risultato è zero se le stringhe sono uguali; compareTo restituisce 0 esattamente quando il metodo equals(Object) restituirebbe true.

Questa è la definizione dell’ordinamento lessicografico. Se due stringhe sono diverse, allora hanno caratteri diversi in qualche indice che è un indice valido per entrambe le stringhe, o le loro lunghezze sono diverse o entrambe. Se hanno caratteri diversi in una o più posizioni degli indici, sia k il più piccolo indice valido; quindi la stringa il cui carattere in posizione k ha il valore più piccolo, come determinato usando l’operatore < precede lessicograficamente l’altra stringa. In questo caso, compareTo restituisce la differenza dei due valori dei caratteri in posizione k nelle due stringhe, cioè il valore:

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

Nel nostro esempio, “abc” precede “def”, quindi viene restituito un numero intero negativo. Quindi l’indice più basso con un carattere diverso è 0 e a-d corrisponde a -3.

9. Qual sarà l’output del seguente programma?

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

Risposta corretta: A

Il codice x.concat(y) creerà una nuova stringa ma non viene assegnato a x, quindi il valore di x non viene modificato.

10. Qual sarà l’output del seguente programma?

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

Risposta corretta: A

L’output delle istruzioni fornite sarà “false” perché in Java l’operatore + ha una precedenza maggiore rispetto all’operatore ==. Quindi l’espressione fornita verrà valutata come “s1 == s2 is:abc” == “abc”, ovvero false.

11. Qual sarà l’output delle seguenti istruzioni?

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

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

Click to Reveal Answer

Risposta corretta: B

Prima di tutto, viene eseguita l’espressione tra parentesi. Poi vengono eseguiti tutti gli operatori +, quindi vengono eseguiti da sinistra a destra.

Otteniamo una stringa con ogni concatenazione, quindi l’output viene prodotto come mostrato di seguito.

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

12. Quanti oggetti String vengono creati nelle seguenti istruzioni?

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

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

Click to Reveal Answer

Risposta corretta: C

Nella dichiarazione 1, “abc” viene creato nel pool delle stringhe.

Nella dichiarazione 2, prima di tutto “abcd” viene creato nel pool di stringhe. Poi viene passato come argomento al nuovo operatore String e un’altra stringa viene creata nella memoria heap.

Quindi vengono creati un totale di 3 oggetti stringa.

13. Qual sarà l’output delle seguenti istruzioni?

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

Risposta corretta: A

La s1 è nel pool di stringhe mentre la s2 viene creata nella memoria heap.

Di conseguenza s1==s2 restituirà false.

Quando viene chiamato il metodo s2.intern(), controlla se c’è una stringa con valore “abc” nel pool. Quindi restituisce il riferimento di s1. Quindi sia s1 che s2 stanno ora puntando alla stessa istanza di stringa.

Di conseguenza s1==s2.intern() restituirà true.

14. Seleziona tutte le interfacce implementate dalla classe String.

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

Click to Reveal Answer

Risposta corretta: A, B, C

La stringa è serializzabile e comparabile. Constable è una nuova interfaccia dalla release di Java 12.

15. Seleziona tutte le ragioni che rendono la stringa un candidato perfetto per la chiave della mappa?

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

**Risposta corretta: A, B, C
**
**
L’implementazione corretta dei metodi hashCode() ed equals() è un must per una chiave di mappa. Poiché la stringa è finale e immutabile, non ci sono possibilità di corruzione dei dati chiave.

16. Qual sarà l’output del seguente frammento di codice?

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

**Risposta corretta: A
**
**
Stamperà “JAVA” perché l’argomento all’interno del metodo println() è un’assegnazione. Quindi verrà trattato come System.out.println("JAVA").

17. Qual sarà l’output delle seguenti istruzioni?

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

Risposta corretta: A

Stamperà false perché s2 non è di tipo String. Se osservi l’implementazione del metodo equals() di String, troverai un controllo che utilizza l’operatore instanceof per verificare se il tipo dell’oggetto passato è String? In caso contrario, restituisce false.

18. Qual sarà l’output del seguente frammento di codice?

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

Risposta corretta: A

È una domanda trabocchetto e l’output sarà false. Sappiamo che il metodo intern() restituirà il riferimento dell’oggetto String dal pool delle stringhe, ma poiché non l’abbiamo assegnato di nuovo a s2, non c’è alcun cambiamento in s2. Quindi sia s1 che s2 hanno un riferimento diverso.

Se cambiamo il codice alla riga 3 in s2 = s2.intern(); allora l’output sarà true.

19. Seleziona tutte le classi che estendono la classe String.

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

Click to Reveal Answer

**Risposta corretta: D
**
È una domanda trabocchetto. String è una classe finale, quindi non puoi estenderla.

20. Quali delle seguenti affermazioni sono vere riguardo a String in 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

Risposta corretta: C, D, E

Non possiamo estendere la classe String perché è finale. StringBuffer non la estende. La classe String è definita nel package java.lang. La stringa è immutabile e quindi thread-safe in Java. La stringa è sensibile alle maiuscole e minuscole, quindi “abc” non è uguale a “ABC”.

21. Qual sarà l’output delle seguenti istruzioni?

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

Risposta corretta: B

La riga 2 stamperà null perché il metodo print ha una verifica di null come questa:

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

La linea 3 genererà NullPointerException perché stiamo cercando di invocare la funzione toString() su 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