La differenza di comportamento è correlato alle differenze tra StringBuilder
e StringBuffer
.
Javadoc di String#intern()
afferma che restituisce
Quando il metodo interno viene richiamato, se il pool contiene già una stringa uguale all'oggetto String
determinato con il metodo equals(Object)
, la stringa dalla piscina viene restituito. In caso contrario, questo oggetto String
viene aggiunto al pool e un riferimento a questo oggetto String
viene restituito.
Il String
creato da
String str2 = new StringBuffer("ja").append("va").toString();
è un nuovo String
che non appartiene alla piscina.
Per
str2.intern() == str2
restituire false
, la chiamata intern()
deve aver restituito un valore di riferimento differente, cioè. il String
"java"
era già in piscina.
Nel primo confronto, il String
"计算机 软件" non era nel pool di stringa prima alla chiamata a intern()
. intern()
ha quindi restituito lo stesso riferimento di quello memorizzato in str2
. L'uguaglianza di riferimento str2 == str2
restituisce quindi true
.
fonte
2015-08-14 01:38:55
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern() – twentylemon
sorry! Non capisco qual è il tuo punto? – side
Perché no? Non c'è motivo per cui entrambi dovrebbero restituire "true", o perché entrambi dovrebbero restituire lo stesso risultato. – EJP