logo

Mutevole e immutabile in Java

Java è un linguaggio di programmazione orientato agli oggetti. Poiché è un linguaggio di programmazione orientato agli oggetti, tutti i metodi e i meccanismi ruotano attorno agli oggetti. Un concetto basato sugli oggetti è mutabile e immutabile in Java . Gli oggetti in Java sono mutabili o immutabili; dipende da come l'oggetto può essere iterato.

In questa sezione discuteremo di oggetti mutabili e immutabili in Java. Inoltre, vedremo la differenza tra loro.

Cosa sono gli oggetti mutabili

Gli oggetti mutabili sono oggetti il ​​cui valore può essere modificato dopo l'inizializzazione. Possiamo modificare i valori dell'oggetto, come campo e stati, dopo che l'oggetto è stato creato. Per esempio, java.util.Date , StringBuilder , StringBuffer , eccetera.

Quando apportiamo una modifica agli oggetti mutabili esistenti, non verrà creato alcun nuovo oggetto; invece, altererà il valore dell'oggetto esistente. Le classi di questi oggetti forniscono metodi per apportare modifiche al suo interno.

I Getter e i Setter (metodi get() e set()) sono disponibili negli oggetti mutabili. L'oggetto Mutable può o meno essere thread-safe.

valore della stringa

Cosa sono gli oggetti immutabili

Gli oggetti immutabili sono oggetti il ​​cui valore non può essere modificato dopo l'inizializzazione. Non possiamo cambiare nulla una volta creato l'oggetto. Per esempio, oggetti primitivi come int , lungo , galleggiante , Doppio , tutte le classi legacy, Classe involucro , Classe di stringhe , eccetera.

In poche parole, immutabile significa non modificato o immutabile. Una volta creati gli oggetti immutabili, i valori e lo stato degli oggetti non possono essere modificati.

Sono disponibili solo i Getter (metodo get()) e non i Setter (metodo set()) per oggetti immutabili.

Vediamo come creare classi per oggetti mutabili e immutabili.

Come creare una classe mutabile

Le seguenti due cose sono essenziali per creare una classe mutabile:

  • Metodi per modificare i valori dei campi
  • Getter e Setter degli oggetti

Considera l'esempio seguente della classe mutabile:

funzione statica in Java
 public class JtpExample { private String s; JtpExample(String s) { this.s = s; } public String getName() { return s; } public void setName(String coursename) { this.s = coursename; } public static void main(String[] args) { JtpExample obj = new JtpExample('JavaTpoint'); System.out.println(obj.getName()); // Here, we can update the name using the setName method. obj.setName('Java Training'); System.out.println(obj.getName()); } } 

Produzione:

 JavaTpoint Java Training 

Dall'esempio precedente, stiamo modificando il valore del nome utilizzando il metodo setName.

Come creare una classe immutabile

Le seguenti cose sono essenziali per creare una classe immutabile:

  • Classe finale, dichiarata finale in modo che non possa essere estesa.
  • Tutti i campi devono essere privati ​​in modo che l'accesso diretto ai campi sia bloccato.
  • Nessun setter
  • Tutti i campi modificabili dovrebbero essere definitivi in ​​modo che non possano essere ripetuti una volta inizializzati.

Considera l'esempio seguente:

 public class JtpExample1 { private final String s; JtpExample1(final String s) { this.s = s; } public final String getName() { return s; } public static void main(String[] args) { JtpExample obj = new JtpExample('Core Java Training'); System.out.println(obj.getName()); } } 

Produzione:

 Core Java Training 

Quindi, abbiamo discusso gli oggetti e le classi mutabili e immutabili. Discutiamo le differenze tra loro:

Differenza tra oggetti mutabili e immutabili

Di seguito sono riportate alcune differenze fondamentali tra oggetti mutabili e immutabili in Giava :

numero primo java
  • Gli oggetti mutabili possono essere modificati in qualsiasi valore o stato senza aggiungere un nuovo oggetto. Considerando che gli oggetti immutabili non possono essere modificati nel loro valore o stato una volta creati. Nel caso di oggetti immutabili, ogni volta che cambiamo lo stato dell'oggetto, verrà creato un nuovo oggetto.
  • Gli oggetti mutabili forniscono un metodo per modificare il contenuto dell'oggetto. In confronto, gli oggetti immutabili non forniscono alcun metodo per modificare i valori.
  • Gli oggetti mutabili supportano entrambi i setter e i getter. In confronto, gli oggetti immutabili supportano solo setter, non getter.
  • Gli oggetti Mutable possono o meno essere thread-safe, ma gli oggetti immutabili sono thread-safe per impostazione predefinita.
  • Gli esempi di classi mutabili sono StringBuffer, Java.util.Date, StringBuilder, ecc. Mentre gli oggetti immutabili sono classi legacy, classi wrapper, classe String, ecc.

Considera la tabella seguente:

Mutevole Immutabile
Possiamo modificare il valore degli oggetti mutabili dopo l'inizializzazione. Una volta avviato un oggetto immutabile; Non possiamo cambiare i suoi valori.
Lo stato può essere cambiato. Lo stato non può essere cambiato.
Negli oggetti mutabili non si formano nuovi oggetti. Negli oggetti immutabili, un nuovo oggetto si forma quando il valore dell'oggetto viene alterato.
Fornisce metodi per modificare l'oggetto. Non fornisce alcun metodo per modificare il valore dell'oggetto.
Supporta i metodi get() e set() per dela con l'oggetto. Supporta solo il metodo get() per passare il valore dell'oggetto.
Le classi mutabili possono o meno essere thread-safe. Le classi immutabili sono thread-safe.
Gli elementi essenziali per creare una classe mutabile sono metodi per modificare campi, getter e setter. Gli elementi essenziali per creare una classe immutabile sono la classe finale, i campi privati, gli oggetti mutabili finali.

Perché le stringhe in Java sono immutabili

La stringa in Java è una classe molto speciale, poiché viene utilizzata quasi in ogni programma Java. Ecco perché è Immutabile per migliorare le prestazioni e la sicurezza. Capiamolo nel dettaglio:

In Java, le stringhe utilizzano il concetto di letterali. Supponiamo di avere un oggetto con molte variabili di riferimento. In tale scenario, se modifichiamo il valore di una variabile di riferimento, ciò influenzerà l'intero oggetto e tutti i suoi valori.

tipi di alberi binari

Oltre ai motivi di cui sopra, anche i seguenti motivi sono responsabili di rendere immutabile la stringa:

Gli oggetti immutabili sono molto semplici; non è necessaria la sincronizzazione e sono intrinsecamente thread-safe. Ma gli oggetti immutabili costituiscono ottimi elementi costitutivi per altri oggetti, quindi dobbiamo prestare loro particolare attenzione.

La maggior parte degli sviluppatori rende la stringa l'oggetto finale in modo che non possa essere modificata in seguito.

Conclusione

Abbiamo discusso degli oggetti mutabili e immutabili in Java, ora abbiamo una chiara comprensione degli oggetti e delle classi sia mutabili che immutabili. Inoltre, abbiamo visto come creare una classe mutabile e immutabile.

Si noti che gli oggetti immutabili possono essere modificati nel loro valore e stato una volta avviati e possono o meno essere thread-safe. In confronto, gli oggetti immutabili non possono essere modificati nel loro stato, valore e thread-safe predefinito.