Sto cercando di capire la classe String
di Java ma sto riscontrando difficoltà a comprendere la situazione descritta di seguito.Utilizzo di intern in stringhe java
Si consideri il seguente frammento di esempio:
String x = new String("Hey");
String y = "Hey";
Se uso bool = y == x.intern();
la variabile bool
sarà pari true
.
La mia domanda è:
Quando faccio una dichiarazione come questa:
String b = "h";
String a = b.intern + "ey";
boolean x = a == "hey";
x
's valore sarebbe false
ma quando faccio a = (b + "ey").intern();
x
' valore s sarò true
.
Perché il x = true
non è nel secondo esempio? È perché le dichiarazioni nel primo esempio non sono uguali? Se sì, quali sono le differenze?
Il seguente collegamento potrebbe essere utile: https://weblogs.java.net/blog/2006/06/26/all-about-intern –
'String + String' restituisce una nuova stringa che * non * magicamente internato: non tenta di trovare stringhe internamente esistenti con lo stesso contenuto. Ora, se entrambe le espressioni String sono letterali, l'intera espressione potrebbe essere * piegata * durante la compilazione, il che significa che solo il risultato * viene trovato nell'output compilato ed è soggetto a regole interne standard, ma questo porta a un caso carino diverso: '(" h "+" ey ") ==" hey "' è vero. Non appena la piegatura è * eliminata * (cioè con una variabile) questo scompare. – user2246674
@TariqAyman Ho apportato alcune modifiche alla tua domanda, cercando di migliorare la sua formattazione. Si prega di rivedere se si ritiene che qualsiasi punto della tua domanda è stato perso. – acdcjunior