वर्तमान जेवीएम में दो प्रकार के स्विच बाइट कोड हैं: लुकअपस्विच और टेबलस्विच।
स्विच स्टेटमेंट में प्रत्येक मामले में एक पूर्णांक ऑफसेट होता है, यदि ये ऑफ़सेट सन्निहित हैं (या अधिकतर बड़े अंतराल के साथ सन्निहित हैं) (केस 0: केस 1: केस 2, आदि), तो टेबलस्विच का उपयोग किया जाता है।
यदि ऑफसेट बड़े अंतराल (केस 0: केस 400: केस 93748 :, आदि) के साथ फैला हुआ है, तो लुकअपस्विच का उपयोग किया जाता है।
संक्षेप में, अंतर यह है कि टेबलस्विच लगातार समय में किया जाता है, क्योंकि संभावित मूल्यों की सीमा के भीतर प्रत्येक मूल्य को एक विशिष्ट बाइट-कोड ऑफ़सेट दिया जाता है। इस प्रकार, जब आप स्टेटमेंट को 3 का ऑफ देते हैं, तो सही ब्रांच को खोजने के लिए 3 से आगे कूदना जानता है।
लुकअप स्विच सही कोड शाखा को खोजने के लिए एक द्विआधारी खोज का उपयोग करता है। यह ओ (लॉग एन) समय में चलता है, जो अभी भी अच्छा है, लेकिन सबसे अच्छा नहीं है।
इस बारे में अधिक जानकारी के लिए, यहां देखें: जेवीएम के लुकअपस्विच और टेबलस्विच के बीच अंतर?
इसलिए जहां तक कोई सबसे तेज है, इस दृष्टिकोण का उपयोग करें: यदि आपके पास 3 या अधिक मामले हैं जिनके मूल्य लगातार या लगभग लगातार हैं, तो हमेशा एक स्विच का उपयोग करें।
यदि आपके पास 2 मामले हैं, तो एक बयान का उपयोग करें।
किसी भी अन्य स्थिति के लिए, स्विच सबसे अधिक तेजी से होने की संभावना है , लेकिन इसकी गारंटी नहीं है, क्योंकि लुकअपस्विच में द्विआधारी-खोज एक खराब परिदृश्य को मार सकती है।
इसके अलावा, ध्यान रखें कि JVM JIT ऑप्टिमाइज़ेशन चलाएगा यदि स्टेटमेंट्स कोड में सबसे हॉट ब्रांच को रखने की कोशिश करेंगे। इसे "शाखा भविष्यवाणी" कहा जाता है। इस बारे में अधिक जानकारी के लिए, यहां देखें: https://dzone.com/articles/branch-prediction-in-java
आपके अनुभव अलग-अलग हो सकते हैं। मुझे नहीं पता कि JVM लुकअपस्विच पर एक समान अनुकूलन नहीं चलाता है, लेकिन मैंने JIT अनुकूलन पर भरोसा करना सीखा है और संकलक को बाहर करने की कोशिश नहीं की है।