2015-12-29 9 views
5

यह saidJVMS8 में के रूप में:जेवीएम में 'बूलियन' प्रकार का उद्देश्य क्या है?

हालांकि जावा वर्चुअल मशीन एक बूलियन प्रकार परिभाषित करता है, यह केवल इसके लिए बहुत ही सीमित सहायता प्रदान करता है। बूलियन मूल्यों पर संचालन के लिए समर्पित जावा वर्चुअल मशीन निर्देश पूरी तरह से नहीं हैं। इसके बजाए, जावा प्रोग्रामिंग भाषा जो अभिव्यक्तियों को बूलियन मानों पर संचालित करती है, जावा वर्चुअल मशीन int डेटा प्रकार के मान का उपयोग करने के लिए संकलित की जाती है।

दरअसल, इन दोनों तरीकों:

boolean expr1(boolean a, boolean b) { 
    return a || b; 
} 

int expr2(int a, int b) { 
    return ((a != 0) || (b != 0)) ? 1 : 0; 
} 

एक ही बाइट कोड (विधि हस्ताक्षर को छोड़कर) का उत्पादन करेगा

boolean expr1(boolean, boolean); 
    Signature: (ZZ)Z 
    Code: 
     0: iload_1  
     1: ifne   8 
     4: iload_2  
     5: ifeq   12 
     8: iconst_1  
     9: goto   13 
     12: iconst_0  
     13: ireturn  

    int expr2(int, int); 
    Signature: (II)I 
    Code: 
     0: iload_1  
     1: ifne   8 
     4: iload_2  
     5: ifeq   12 
     8: iconst_1  
     9: goto   13 
     12: iconst_0  
     13: ireturn  

तो, मैं क्यों फिर भी JVM जरूरत boolean प्रकार करता है समझ में नहीं आता? बस विधि हस्ताक्षर की रनटाइम जांच के लिए?

+0

आप 'बूलियन 'प्रकार के साथ' बूलियन 'प्रकार के साथ अधिक क्लीनर कोड लिख सकते हैं जो' बूलियन 'को अनुकरण कर रहा है। –

+0

@MickMnemonic Sure। लेकिन मैं 'जावा' भाषा के बारे में बात नहीं कर रहा हूं, लेकिन 'जेवीएम' के बारे में जो 'जावा' भाषा के बारे में कुछ नहीं जानता। – Andremoniy

+0

@sidgate सवाल इसके बजाय '0/1' का उपयोग करने के बारे में नहीं है। सवाल यह है कि, 'जेवीएम' को विशेष प्रकार के 'बूलियन' घोषित करने की आवश्यकता क्यों नहीं है, न केवल 'int', जबकि इसमें 'int' के लिए विशेष निर्देश नहीं हैं। इसलिए 'जावा' चश्मे के बारे में सवाल न करें, लेकिन 'जेवीएम' आर्किटेक्चर के बारे में। – Andremoniy

उत्तर

5

रखरखाव विधि ओवरलोडिंग के लिए न्यूनतम आवश्यक है। हम एक ही कक्षा

boolean a(boolean x) {...}

और

boolean a(int x) {...}

में दो तरीकों वे विभिन्न आंतरिक तर्क हो सकता है तो बाइट कोड में वे अपने हस्ताक्षर से प्रतिष्ठित किया जाना चाहिए है का कहना है।

+0

नहीं हो सकता है रिटर्न प्रकार JVM के लिए हस्ताक्षर का हिस्सा भी है । –

संबंधित मुद्दे