public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder=null; /* ;) */
}
}
¿por qué la salida es CoolReturn, no nula?conjunto de referencia de objeto a nulo en el bloque final
Saludos,
Mahendra Athneria
@Jon, pero ¿por qué 'builder.append (" some value ");' modifica el valor real devuelto mientras 'builder = null' no? –
@Darin: Porque 'builder' es una referencia. Establecer una referencia a nulo desactivó dicha referencia, pero el objeto al que hizo referencia todavía existe hasta que se recolecta basura. 'append', por otro lado, modifica el objeto (o una de sus propiedades) – Powerlord
@Darin: el método de adición devuelve el enlace a la variable a la que se llamó. Así que devuelve builder.append ("algún valor"); en realidad añade "algún valor" al constructor y devuelve el enlace al constructor como objeto, que usted cambia en bloque finalmente. Cuando escribes builder = null, solo cambias los puntos del generador, pero no el valor que se encuentra debajo del enlace anterior. – Maxym