संभव डुप्लिकेट:
आप चर कहां घोषित करते हैं? एक विधि का शीर्ष या जब आपको उनकी आवश्यकता होती है?
अगर मैं जावा में लूप के अंदर या बाहर चर घोषित करता हूं तो क्या इससे कोई फर्क पड़ता है?
क्या इस
for(int i = 0; i < 1000; i++) {
int temp = doSomething();
someMethod(temp);
}
इसके बराबर (स्मृति उपयोग के संबंध में)?
int temp = 0;
for(int i = 0; i < 1000; i++) {
temp = doSomething();
someMethod(temp);
}
और क्या होगा अगर अस्थायी चर एक ArrayList उदाहरण के लिए है?
for(int i = 0; i < 1000; i++) {
ArrayList<Integer> array = new ArrayList<Integer>();
fillArray(array);
// do something with the array
}
संपादित करें: javap -c
मैं निम्नलिखित उत्पादन मिला है
लूप के बाहर चर:
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iconst_0
3: istore_2
4: iload_2
5: sipush 1000
8: if_icmpge 25
11: invokestatic #2 // Method doSomething:()I
14: istore_1
15: iload_1
16: invokestatic #3 // Method someMethod:(I)V
19: iinc 2, 1
22: goto 4
25: return
लूप के अंदर चर:
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 23
9: invokestatic #2 // Method doSomething:()I
12: istore_2
13: iload_2
14: invokestatic #3 // Method someMethod:(I)V
17: iinc 1, 1
20: goto 2
23: return
और रुचि के लिए, यह कोड:
public class Test3 {
public static void main(String[] args) {
for(int i = 0; i< 1000; i++) {
someMethod(doSomething());
}
}
private static int doSomething() {
return 1;
}
private static void someMethod(int temp) {
temp++;
}
}
इसका उत्पादन करता है:
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 21
9: invokestatic #2 // Method doSomething:()I
12: invokestatic #3 // Method someMethod:(I)V
15: iinc 1, 1
18: goto 2
21: return
लेकिन अनुकूलन तब रनटाइम पर होता है। क्या अनुकूलित कोड को देखने का कोई तरीका है? (लंबे EDIT के लिए क्षमा करें)