वहाँ केवल "if" स्टेटमेंट का एक प्रकार है। अन्य एक सशर्त अभिव्यक्ति है। जैसा कि बेहतर प्रदर्शन करेगा: वे एक ही बाईटेकोड पर संकलित कर सकते हैं, और मैं उनसे पहचान के साथ व्यवहार करने की अपेक्षा करूंगा - या इतने करीब कि आप निश्चित रूप से प्रदर्शन के मामले में एक को चुनना नहीं चाहेंगे।
कभी-कभी एक if
बयान अधिक पठनीय होगा, कभी-कभी सशर्त ऑपरेटर अधिक पठनीय होगा। विशेष रूप से, मैं सशर्त ऑपरेटर का उपयोग करने की सलाह दूंगा जब दो ऑपरेंड सरल और साइड-इफ़ेक्ट-फ़्री होते हैं, जबकि यदि दो शाखाओं का मुख्य उद्देश्य उनके साइड-इफ़ेक्ट हैं, तो मैं शायद एक if
स्टेटमेंट का उपयोग करूँगा ।
यहाँ एक नमूना कार्यक्रम और बाइटकोड है:
public class Test {
public static void main(String[] args) {
int x;
if (args.length > 0) {
x = 1;
} else {
x = 2;
}
}
public static void main2(String[] args) {
int x = (args.length > 0) ? 1 : 2;
}
}
बाइटकोड के साथ विघटित javap -c Test
:
public class Test extends java.lang.Object {
public Test();
Code:
0: aload_0
1: invokespecial #1
4: return
public static void main(java.lang.String[]
Code:
0: aload_0
1: arraylength
2: ifle 10
5: iconst_1
6: istore_1
7: goto 12
10: iconst_2
11: istore_1
12: return
public static void main2(java.lang.String[
Code:
0: aload_0
1: arraylength
2: ifle 9
5: iconst_1
6: goto 10
9: iconst_2
10: istore_1
11: return
}
जैसा कि आप देख सकते हैं, यहां बाईटेकोड में थोड़ा अंतर है - चाहे istore_1
ब्रांज़ के भीतर होता है या नहीं (मेरे पिछले बेहद त्रुटिपूर्ण प्रयास के विपरीत) :) लेकिन मुझे बहुत आश्चर्य होगा अगर जेटर अलग देशी कोड के साथ समाप्त हो गया।