Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara String Pool, Metodo Equals() | Stringa
Basi di Java

bookString Pool, Metodo Equals()

Il metodo equals()

Questo capitolo fornisce una breve panoramica del metodo equals(). Questo metodo viene utilizzato per confrontare oggetti ed è comunemente impiegato con oggetti di tipo String. Esaminiamo un esempio di creazione di due variabili stringa identiche e del loro confronto utilizzando ==:

Main.java

Main.java

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String first = new String("string"); String second = new String("string"); System.out.println(first == second); } }

Nella risposta otteniamo "false", ma perché? I valori delle due variabili stringa sono uguali e corrispondono a "string". Questo accade perché == confronta i riferimenti agli oggetti in memoria, non i valori effettivi. I nostri oggetti si trovano al di fuori dello String pool.

String pool

Cos'è lo String Pool? È un'area nella memoria heap che viene allocata durante la creazione di oggetti stringa. Se creiamo un oggetto String con valore "string" e poi ne creiamo un altro con lo stesso valore, entrambi gli oggetti faranno riferimento allo stesso oggetto in memoria, che si trova nello string pool.

Quindi, perché abbiamo ottenuto "false" nel nostro caso? Perché abbiamo aggirato lo string pool creando oggetti utilizzando la sintassi String first = new String("string");. Quando creiamo un oggetto String utilizzando una sintassi diversa, come String first = "string";, esso verrà posizionato nello string pool.

Consideriamo un esempio di codice:

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first == second)); System.out.println("Result of comparing first and third: " + (first == third)); } }

Consideriamo un diagramma che spiega come funziona e quali oggetti si trovano nel String Pool.

Come si confrontano i valori delle stringhe presenti nello String Pool e quelli esterni ad esso? A questo scopo, Java fornisce il metodo equals, che confronta i valori degli oggetti String invece dei loro riferimenti. Consideriamo un esempio di codice in cui confrontiamo le stringhe utilizzando il metodo equals invece di ==.

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first.equals(second))); System.out.println("Result of comparing first and third: " + (first.equals(third))); } }

Ora possiamo vedere che abbiamo il confronto corretto.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 7

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Suggested prompts:

Can you explain more about the difference between == and equals() in Java?

Why does using new String() bypass the string pool?

Can you show an example where == returns true for strings?

bookString Pool, Metodo Equals()

Scorri per mostrare il menu

Il metodo equals()

Questo capitolo fornisce una breve panoramica del metodo equals(). Questo metodo viene utilizzato per confrontare oggetti ed è comunemente impiegato con oggetti di tipo String. Esaminiamo un esempio di creazione di due variabili stringa identiche e del loro confronto utilizzando ==:

Main.java

Main.java

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String first = new String("string"); String second = new String("string"); System.out.println(first == second); } }

Nella risposta otteniamo "false", ma perché? I valori delle due variabili stringa sono uguali e corrispondono a "string". Questo accade perché == confronta i riferimenti agli oggetti in memoria, non i valori effettivi. I nostri oggetti si trovano al di fuori dello String pool.

String pool

Cos'è lo String Pool? È un'area nella memoria heap che viene allocata durante la creazione di oggetti stringa. Se creiamo un oggetto String con valore "string" e poi ne creiamo un altro con lo stesso valore, entrambi gli oggetti faranno riferimento allo stesso oggetto in memoria, che si trova nello string pool.

Quindi, perché abbiamo ottenuto "false" nel nostro caso? Perché abbiamo aggirato lo string pool creando oggetti utilizzando la sintassi String first = new String("string");. Quando creiamo un oggetto String utilizzando una sintassi diversa, come String first = "string";, esso verrà posizionato nello string pool.

Consideriamo un esempio di codice:

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first == second)); System.out.println("Result of comparing first and third: " + (first == third)); } }

Consideriamo un diagramma che spiega come funziona e quali oggetti si trovano nel String Pool.

Come si confrontano i valori delle stringhe presenti nello String Pool e quelli esterni ad esso? A questo scopo, Java fornisce il metodo equals, che confronta i valori degli oggetti String invece dei loro riferimenti. Consideriamo un esempio di codice in cui confrontiamo le stringhe utilizzando il metodo equals invece di ==.

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first.equals(second))); System.out.println("Result of comparing first and third: " + (first.equals(third))); } }

Ora possiamo vedere che abbiamo il confronto corretto.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 7
some-alt