के आधार पर इलाज जब मैं संकलन:javac स्थिर अंतिम अलग ढंग से काम विधि
public static final boolean FOO = false;
public static final void fooTest() {
if (FOO) {
System.out.println("gg");
}
}
मैं एक खाली विधि fooTest() {}
मिलता है। हालांकि जब मैं संकलित करता हूं:
static boolean isBar = false;
public static final boolean BAR = isBar;
public static final void fooTest() {
if (BAR) {
System.out.println("gg");
}
}
यदि कथन कथित कक्षा फ़ाइल में शामिल है। क्या इसका मतलब जावा में स्थिर फाइनल के दो अलग-अलग "प्रकार" हैं, या यह सिर्फ एक कंपाइलर अनुकूलन है?
कंपाइलर अभिव्यक्तियों का मूल्यांकन कर सकता है जिसमें संकलन समय पर केवल 'स्थिर अंतिम' और शाब्दिक स्थिरांक शामिल हैं, और आवश्यकतानुसार अनुकूलन निष्पादित करते हैं। संकलन समय पर पहली अभिव्यक्ति का मूल्यांकन किया जा सकता है; दूसरा नहीं कर सकता, क्योंकि यह एक गैर-अंतिम अभिव्यक्ति पर निर्भर करता है। – dasblinkenlight
जिसका मतलब यह नहीं है कि जेआईटी बाइटकोड संकलन इसे निश्चित रूप से छोड़ देगा। –