Beh, quello che ho trovato è come segue,
Return restituisce effettivamente un valore e viene copiato in String a=obj.go();
, prima che l'esecuzione passi a Finally.
Consente di verificarlo seguendo gli esperimenti.
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);
}
}
l'output del programma è
infine valore di q è ciao
hii
e se prendiamo StringBuffer invece di stringa come segue,
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;*/
}
}
}
L'comesout uscita sia,
infine valore di q è ciao
ciao
ed infine se prendiamo int invece di stringa come segue,
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;*/
}
}
}
l'uscita è
infine valore di q è 2
**Ananlysis**
1.In primo caso, restituire indirizzo copiato di stringa in variabile un, poi excecution passa a Finally dove viene modificato String. Ma dal momento che in caso di stringhe non possiamo manipolare alcuna stringa, viene costruita una nuova stringa. Quindi nella variabile viene salvato un indirizzo della stringa originale, che viene stampato.
2.In secondo caso, restituire l'indirizzo copiato di StringBuffer nella variabile a e infine questo oggetto StringBuffer viene manipolato, piuttosto che ne viene creato uno nuovo. quindi il valore che è stato memorizzato nella variabile a viene manipolato, come mostrato nell'istruzione di stampa.
3. Nel terzo caso, il valore di int viene copiato nella variabile a, prima che l'esecuzione vada definitivamente. e quindi un ottiene il valore di 1. e quindi in definitiva abbiamo modificato il valore di q che non cambia comunque il valore di a.
Si potrebbe leggere questo: http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally –
Il valore della variabile locale 'q' è stato modificato in" ciao ", sì. Ma quello che hai restituito era "hii". – maksimov
Per favore guarda la mia nuova risposta ... proviamo a perfezionare questo concetto di più .. – Ahmad