2011-08-16 13 views
6
Line 1: String x = "Java"; 
Line 2: x.concat(" Rules!"); 
Line 3: System.out.println("x = " + x); 

salida es "x = Java"¿Qué ocurre con PERDIDO objetos String

Línea 1: crea un nuevo objeto String, da el valor "Java", y se refieren a ella x.

Línea 2: VM crea un segundo objeto String con el valor "¡Reglas de Java!" pero nada se refiere a eso. EL OBJETO DE LA SEGUNDA CUERDA SE PERDIÓ AL INSTANTE NO PUEDES OBTENERLO.

Como estos Objetos de Cadena se crean en Heap, el segundo objeto será Basura Recopilada.

+0

Tenga en cuenta que '" x = "+ x' crea una tercera cadena. – Thilo

Respuesta

5

Absolutamente. Ese es el objetivo de la recolección de basura.

7

Enós, en Java cadenas son inmutables, por lo que debe asignar

x = x.concat(" Rules"); 

para la segunda línea y luego se va a trabajar.

El segundo objeto será GC eventualmente porque ya no hay una entidad que haga referencia a él.

+2

La pregunta no era sobre hacer que algo funcionara: Enosh quería saber qué le sucede al resultado Cadena de la operación concat, ya sea que se haya creado y almacenado en alguna parte o no. –

+0

Sí, lo sé, pero prefiero corregir el error, para que las personas que vean esta pregunta no se equivoquen. – Dorpsidioot

0

De acuerdo con todos los demás que obtiene la basura recogida. Pero advierto que el compilador puede eliminar esto durante la compilación, ya que los métodos concat solo afectan los campos locales del método y, por lo tanto, la declaración completa no tiene sentido.

Cuestiones relacionadas