Bueno, es lo que he encontrado como sigue,
Devolución realmente devuelve un valor y se copia a String a=obj.go();
, antes de la ejecución va a Por último.
Permite verificarlo siguiendo los siguientes experimentos.
public class Test2 {
public static void main(String[] args) {
Test2 obj=new Test2();
String a=obj.go();
System.out.print(a);
}
public String go() {
String q="hii";
try {
return q;
}
finally {
q="hello";
System.out.println("finally value of q is "+q);
}
}
la salida del programa es
por último valor de q es hola
HII
y si tomamos StringBuffer en lugar de cuerdas de la siguiente manera,
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 obj=new Test2();
StringBuffer a=obj.go();
System.out.print(a);
}
public StringBuffer go(){
StringBuffer q=new StringBuffer("hii");
try{
return q;
}
finally{
q.replace(0, q.length(), "hello");
System.out.println("finally value of q is "+q);
/*return q1;*/
}
}
}
El comesout salida sea,
por último valor de q es hola
hola
y, finalmente, si tomamos int en lugar de la cadena de la siguiente manera,
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 obj=new Test2();
int a=obj.go();
System.out.print(a);
}
public int go(){
int q=1;
try{
return q;
}
finally{
q=2;
System.out.println("finally value of q is "+q);
/*return q1;*/
}
}
}
la salida es
finalmente valor de q es 2
**Ananlysis**
1.In primer caso, devolver dirección de copiado de cadena en la variable a, entonces excecution va a finalmente donde se cambia la cadena. Pero dado que en el caso de Strings, no podemos manipular cualquier String, se construye una nueva String. Así que en la variable una dirección de cadena original se guarda, que se imprime.
2.In segundo caso, remite copia de StringBuffer en la variable un, y finalmente se manipula este objeto StringBuffer, en lugar de crear uno nuevo. por lo que el valor que se almacena en la variable un también recibe el manipulado, que ha visto en el estado de impresión.
3.En el tercer caso, el valor de int se copia en la variable a, antes de ejecutar por fin. y así a obtiene el valor de 1. y luego finalmente cambiamos el valor de q que de todos modos no cambia el valor de a.
Le recomendamos leer esto: http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally –
El valor de la variable local 'q' se ha cambiado a" hola ", sí. Pero lo que devolviste fue "hii". – maksimov
Mire mi nueva respuesta ... intentemos refinar este concepto más ... – Ahmad