Duplicar posibles:
intern() behaving differently in Java 6 and Java 7String.intern() Referencia del cambio de cadena JDK7 original
Mientras que hace ejemplo para this question
noté un comportamiento extraño de intern()
método cuando llamo al intern()
método en String
a partir de entonces puedo usar ==
operador f o el Original String.
JavaDoc de intern()
método:
Devuelve una representación canónica para el objeto de cadena. Un conjunto de cadenas, inicialmente vacío, se mantiene en privado por la clase String.
Cuando se invoca el método interno, si el grupo ya contiene una cadena igual a este objeto String según lo determinado por el método
equals(Object)
, se devuelve la cadena del grupo. De lo contrario, este objeto String se agrega al grupo y se devuelve una referencia a este objeto String.ello se deduce que para cualquier par de cadenas
s
yt
,s.intern() == t.intern()
es cierto si y sólo si es verdads.equals(t)
.
Por encima de Javadoc no dice que la cadena original se cambia. Entonces, ¿por qué este programa imprime okay
cuando test
es la entrada.
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);
String username;
System.out.print("username: ");
username = user_input.next();
// Even if I do not assign returned string for comparison still it compares
// okay else it does not compare
username.intern();
if (username == "test") {
System.out.println("okay");
}
else {
System.out.println("not okay");
}
}
}
La llamada 'intern()' * no debe * poder influir en el resultado de la prueba a continuación. –
@JoachimSauer curiosamente lo hace. Acabo de probarlo con el último Java7. –
Intentó con java 6 e imprime "no está bien". – dcernahoschi