2010-01-17 14 views
5

जैसा कि हम जावा चर में जानते हैं, नामित प्रकार वाले बिट धारक हैं। और primitives के लिए बिट्स एक संख्यात्मक मूल्य का प्रतिनिधित्व करता है।बिट पैटर्न (चर मूल्य)?

उदाहरण के लिए। मूल्य 6 के साथ एक बाइट थोड़ा पैटर्न 00000110 है।

इसलिए मैं जानना चाहता था क्योंकि बुलियन भी एक आदिम है जो मूल्य के लिए सत्य और गलत के लिए थोड़ा सा पैटर्न है।

+0

मुझे उत्सुकता है कि आप उत्तर देने के लिए क्या संभव उपयोग कर सकते हैं। –

उत्तर

6

आंतरिक रूप से बाइटकोड/वीएम बूलियन में बाइट पैटर्न 00000001 के साथ बाइट्स के रूप में दर्शाए जाते हैं और गलत के लिए 00000000। लेकिन वह जानकारी आपको जावा डेवलपर के रूप में कुछ भी नहीं खरीदती है क्योंकि आप जावा में बुलियन के संख्यात्मक प्रतिस्थापन का उपयोग नहीं कर सकते हैं या अन्यथा जावा के रूप में उन्हें सख्ती से अलग कर सकते हैं।

संपादित करें: मैंने अभी Java VM Spec को देखा और पता चला कि मेरा जवाब गलत था। इससे पहले कि मैंने पहले कहा था, बूलियन को बाइट कोड में CONSTANT_Integer structs के रूप में संग्रहीत किया जाता है जो उन्हें निरंतर पूल में डेटा के लिए 4 बाइट्स पर कब्जा कर देता है, लेकिन निरंतर पूल एकीकृत होने के कारण, किसी भी कक्षा में अधिकतम 2 बूलियन प्रविष्टियां हो सकती हैं। और चूंकि निरंतर पूल का संदर्भ हमेशा 2 बाइट चौड़ा होता है, इसलिए बूलियन की एक सरणी बाइट कोड में प्रति प्रविष्टि 2 बाइट्स पर कब्जा कर लेती है।

3

हाँ, के रूप में skaffman ने कहा: यह सच है 1 है और झूठे 0.

है लेकिन वह वास्तव में कोई फर्क नहीं पड़ता, क्योंकि जब तक आप अपने कार्यक्रम के बाहर धारावाहिक डेटा को देखो, क्या आपने कभी उन मूल्यों को देखने के लिए की संभावना नहीं कर रहे हैं जंगल में।

इसके लायक होने के लिए, सामान्य जावा कार्यान्वयन वास्तव में पूर्णांक आकार वाले क्षेत्रों में बूलियन स्टोर करते हैं, यानी उनके पास केवल एक ही जानकारी के आसपास 31 शून्य का पैडिंग है। एक समय में 32 बिट्स तक पहुंचने से 4 में से एक बाइट को पकड़ने से थोड़ा तेज होता है, और एक बाइट से बाहर एक बिट खोदने से बहुत तेज़ होता है। यह अनुकूलन बूलियन के सरणी को बड़े पैमाने पर बड़े बनाता है, हालांकि। यदि आपके पास कई जगह हैं, तो निपटने के लिए कई जगहें हैं और अंतरिक्ष पर कटौती करने की आवश्यकता है, तो आप BitSet का उपयोग कर बेहतर हैं।

2

यदि मैं गलत नहीं हूं तो JVM विनिर्देश यह नहीं बताता है कि बूलियन मानों को आंतरिक रूप से कैसे प्रदर्शित किया जाना चाहिए। आंतरिक रूप से मूल्य का प्रतिनिधित्व कैसे किया जाता है विक्रेता विशिष्ट है और प्रोग्रामर से कोई फर्क नहीं पड़ता क्योंकि यह विवरण JVM पर चल रहे प्रोग्रामों के लिए पूरी तरह से पारदर्शी है।

+0

आप शायद सही हैं। लेकिन क्या होता है जब जेवीएम के बीच क्रमबद्धता और संचार खेलता है? चाहे आंतरिक रूप से मूल्यों का प्रतिनिधित्व कैसे किया जाता है, अलग-अलग JVMs को एक दूसरे के बुलियन (और अन्य) मानों को पहचानने की अनुमति देने के लिए बाध्यकारी मानक होना चाहिए, है ना? –

+0

एक दिलचस्प बिंदु कार्ल है। जैसा कि आपने कहा था, वहां कुछ बाध्यकारी मानक होना चाहिए ... लेकिन मुझे डर है कि मैं उस पर टिप्पणी नहीं कर सकता .. मुझे नहीं पता – Aadith

+0

नहीं, यह विक्रेता विशिष्ट नहीं है - झूठा 0 है, सच है 1. उदाहरण: इस वर्ग को संकलित करें, इसे javap -p -c के साथ decompile: कक्षा परीक्षण {बूलियन टी() {वापसी सच;} बूलियन एफ() {वापसी झूठी;}} –

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