String 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
123456789package 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
1234567891011package 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
1234567891011package 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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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?
Fantastico!
Completion tasso migliorato a 2.7
String 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
123456789package 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
1234567891011package 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
1234567891011package 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.
Grazie per i tuoi commenti!