সম্ভাব্য সদৃশ: আপনি
কোথায় ভেরিয়েবল ঘোষণা করবেন? কোনও পদ্ধতির শীর্ষে বা আপনার যখন প্রয়োজন হয়?
আমি জাভাতে কোনও লুপের অভ্যন্তরে বা বাইরে ভেরিয়েবলগুলি ঘোষনা দিলে কী পার্থক্য রয়েছে?
এই কি
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);
}
এবং যদি অস্থায়ী পরিবর্তনশীল উদাহরণস্বরূপ একটি অ্যারেলিস্ট হয়?
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 এর জন্য দুঃখিত)