public class J {
public Integer method(Integer x)
{
Integer val = x;
try
{
return val;
}
finally
{
val = x + x;
}
}
public static void main(String[] args)
{
J littleFuzzy = new J();
System.out.println(littleFuzzy.method(new Integer(10)));
}
}
Devolverá "10".Comportamiento de la declaración de devolución en catch y finalmente
Ahora solo reemplazo el Tipo de Retorno Integer a StringBuilder y la Salida ha cambiado.
public class I {
public StringBuilder method(StringBuilder x)
{
StringBuilder val = x;
try
{
return val;
}
finally
{
val = x.append("aaa");
}
}
public static void main(String[] args)
{
I littleFuzzy = new I();
System.out.println(littleFuzzy.method(new StringBuilder("abc")));
}
}
salida es "abcaaa"
Por lo tanto, cualquiera puede explicarme en detalle.? ¿Cuáles son las diferencias?
También estoy confundido cuando ejecuté este programa en mi máquina. En el primer caso, devuelve 10 (esperaba que devolverá 20), en el segundo caso devuelve abcaaa (es decir, después de anexar). También estoy desconcertado por este comportamiento. (en el medio no soy el que lo votó hasta ahora) – JProgrammer
Es una buena pregunta. Regresé algunos recuerdos de básicos. Qué está mal con eso ? – Siddharth