String nome = new String("pippo");
JAVA però semplicfica la vita agli sviluppatori, consentendo di istanziare una stringa come un tipo primitivo:
String nome = "pippo";
Le stringhe così create hanno un comportamento diverso in memoria. Se una stringa è istanziata come un tipo primitivo JAVA la mette in un insieme speciale della memoria, dove la riutilizza se serve per migliorare le prestazioni. Quindi se si istanzia un'altra stringa uguale alla prima JAVA se ne accorge e utilizza quella che aveva già. Quindi :
String a = "pippo";
String b = new String("pippo");
String c = "pippo";
System.out.println(a==b);
System.out.println(a==c);
Restituisce questo risultato:
false
true
perchè a e b sono oggetti diversi, visto che a è stata messa nello special pool di stringhe della macchina virtuale mentre b no ; invece JAVA si accorge che c è uguale ad a che esiste già nello special pool, e quindi utilizza a. Quindi a e c sono la stessa cosa.
Per confrontare i valori e non i riferimenti si deve usare equals:
System.out.println(a.equals(b));
System.out.println(a.equals(c));
true
true
Una stringa è un oggetto immutabile e quindi un metodo che agisca sulla stringa non la modifica ma crea un altro oggetto stringa:
String
nome = "pippo";
String
Nome = nome.toUpperCase();
System.out.println(nome);
System.out.println(Nome);
nome non viene modificato dal metodo (in questo caso è un metodo che fa diventare tutte le lettere maiuscole) :
pippo
PIPPO
Nessun commento:
Posta un commento