class A {
String s4 = "abc";
static public void main(String[]args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
A o = new A();
String s5 = new String("def");
System.out.println("s1==s2 : " + (s1==s2));
System.out.println("s1==s1.intern : " + (s1==s1.intern()));
System.out.println("s1==s3 : " + (s1==s3));
System.out.println("s1.intern==s3.intern : " + (s1.intern()==s3.intern()));
System.out.println("s1==s4 : " + (s1==o.s4));
}
}
La salida:Java: literal cadenas
s1==s2 : true
s1==s1.intern : true
s1==s3 : false
s1.intern==s3.intern : true
s1==s4 : true
Mis preguntas:
1. ¿Qué sucede por "String s1 = "abc"
? Supongo que el objeto String se agrega al grupo en la clase String como una cadena interna? ¿Dónde se coloca? La "generación permanente" o solo el montón (como el miembro de datos de la instancia de la clase String)?
2.¿Qué ocurre con "String s2 = "abc"
? Supongo que no se crea ningún objeto. Pero, ¿significa esto que Java Intepreter necesita buscar todas las cadenas internas? ¿Esto causará algún problema de rendimiento?
3.Seems String s3 = new String("abc")
no utiliza cadenas internas.¿Por qué?
4.Will String s5 = new String("def")
¿creará alguna nueva cuerda internificada?
Gracias amigo. Su respuesta se ve genial. Una pregunta más: si el literal se escribe en la parte "constante del grupo" del archivo de clase, ¿cómo es que 2 literales (el mismo contenido) en 2 clases usan la misma cadena interna? –
@DonLi - el grupo de constantes es una sección de un archivo de clase. La especificación del archivo de clase no permite que un archivo de clase haga referencia al conjunto constante de otro archivo de clase. –