Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Confronto di Stringhe in Java | Stringhe
Introduzione a Java

Confronto di Stringhe in Java

Scorri per mostrare il menu

Il confronto è il punto in cui Java inizia a comportarsi in modo un po' più "a basso livello" del previsto. Sembra ovvio che le stringhe possano essere confrontate allo stesso modo dei numeri — usando ==. Dopotutto, se due stringhe sembrano identiche, perché non dovrebbero essere uguali?

Il problema con ==

Se si utilizza == con i letterali di stringa, inizialmente sembra funzionare correttamente:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Entrambe le variabili puntano allo stesso oggetto nel string pool interno di Java — quando lo stesso letterale appare di nuovo, Java riutilizza quello esistente. Quindi == restituisce true.

Ma ora cambiamo leggermente il modo in cui vengono create le stringhe:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Utilizzando new String() si indica a Java di creare ogni volta un oggetto completamente separato — anche se il contenuto è identico. Poiché == confronta gli indirizzi di memoria, non il testo, restituisce false.

Regola fondamentale: == non guarda il testo all'interno della stringa — controlla se entrambe le variabili puntano esattamente allo stesso oggetto in memoria.

equals() — Confronto del Contenuto Effettivo

Se è necessario confrontare il testo effettivo all'interno di due stringhe, utilizzare .equals(). Ignora completamente la memoria e si concentra solo sui caratteri:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Anche se order1 e order2 sono oggetti separati in memoria, .equals() confronta il loro contenuto e restituisce true.

Sensibilità alle maiuscole e minuscole con equals()

Java distingue tra maiuscole e minuscole, quindi anche una sola lettera con una diversa capitalizzazione rende le stringhe diverse:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" e "latte" sono considerate stringhe diverse, quindi il risultato è false.

equalsIgnoreCase() — Confronto senza distinzione tra maiuscole e minuscole

Per confrontare stringhe ignorando le differenze tra maiuscole e minuscole, utilizzare .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() considera "Latte" e "LATTE" identici e restituisce true.

question mark

Cosa confronta == quando viene utilizzato con le stringhe in Java?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Confronto di Stringhe in Java

Il confronto è il punto in cui Java inizia a comportarsi in modo un po' più "a basso livello" del previsto. Sembra ovvio che le stringhe possano essere confrontate allo stesso modo dei numeri — usando ==. Dopotutto, se due stringhe sembrano identiche, perché non dovrebbero essere uguali?

Il problema con ==

Se si utilizza == con i letterali di stringa, inizialmente sembra funzionare correttamente:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Entrambe le variabili puntano allo stesso oggetto nel string pool interno di Java — quando lo stesso letterale appare di nuovo, Java riutilizza quello esistente. Quindi == restituisce true.

Ma ora cambiamo leggermente il modo in cui vengono create le stringhe:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Utilizzando new String() si indica a Java di creare ogni volta un oggetto completamente separato — anche se il contenuto è identico. Poiché == confronta gli indirizzi di memoria, non il testo, restituisce false.

Regola fondamentale: == non guarda il testo all'interno della stringa — controlla se entrambe le variabili puntano esattamente allo stesso oggetto in memoria.

equals() — Confronto del Contenuto Effettivo

Se è necessario confrontare il testo effettivo all'interno di due stringhe, utilizzare .equals(). Ignora completamente la memoria e si concentra solo sui caratteri:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Anche se order1 e order2 sono oggetti separati in memoria, .equals() confronta il loro contenuto e restituisce true.

Sensibilità alle maiuscole e minuscole con equals()

Java distingue tra maiuscole e minuscole, quindi anche una sola lettera con una diversa capitalizzazione rende le stringhe diverse:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" e "latte" sono considerate stringhe diverse, quindi il risultato è false.

equalsIgnoreCase() — Confronto senza distinzione tra maiuscole e minuscole

Per confrontare stringhe ignorando le differenze tra maiuscole e minuscole, utilizzare .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() considera "Latte" e "LATTE" identici e restituisce true.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 5
some-alt