ठीक है, क्या मैंने पाया है इस प्रकार,
वापसी वास्तव में एक मान देता है और उसके String a=obj.go();
में कॉपी किया जाता है, इससे पहले कि निष्पादन अंत में को जाता है।
प्रयोगों का पालन करके इसे सत्यापित करने दें।
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);
}
}
कार्यक्रम के उत्पादन
अंत में क्ष का मूल्य हैलो
hii
है और अगर हम स्ट्रिंग के बजाय StringBuffer ले इस प्रकार है,
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;*/
}
}
}
उत्पादन comesout होने के लिए,
अंत में क्ष का मूल्य हैलो
हैलो
और अंत में अगर हम पूर्णांक स्ट्रिंग के बजाय लेने के लिए इस प्रकार है,
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;*/
}
}
}
उत्पादन
अंत में क्ष का मूल्य है 2
**Ananlysis**
1.In पहला मामला है, स्ट्रिंग की प्रतिलिपि बनाई पता लौट चर एक, तो निष्पादन में अंत में जाता है जहां स्ट्रिंग बदल जाती है। लेकिन स्ट्रिंग्स के मामले में, हम किसी भी स्ट्रिंग का उपयोग नहीं कर सकते हैं, एक नया स्ट्रिंग बनाया गया है। तो परिवर्तनीय में मूल स्ट्रिंग का पता सहेजा गया है, जो मुद्रित हो जाता है।
2.In दूसरे मामले, चर एक में StringBuffer की प्रतिलिपि बनाई पता वापस, और में अंत में इस StringBuffer वस्तु हेरफेर किया है, बल्कि नया बनाने। तो वैरिएबल में संग्रहीत मूल्य भी छेड़छाड़ हो जाता है, जो प्रिंट स्टेटमेंट में देखा जाता है।
3. तीसरे मामले में, int के मूल्य को अंततः निष्पादन से पहले में प्रतिलिपि बनाई गई है। और इस प्रकार का मान 1 हो जाता है और अंततः हमने q का मान बदल दिया है जो का मूल्य बदलता नहीं है।
आप इसे पढ़ना चाहेंगे: http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally –
स्थानीय चर 'q' का मान बदलकर "हैलो" कर दिया गया है, हाँ। लेकिन आप जो लौटाया वह था "एचआईआई"। – maksimov
कृपया मेरा नया उत्तर देखें ... आइए इस अवधारणा को और अधिक परिशोधित करने का प्रयास करें .. – Ahmad