आदिम प्रकार बनाम। पैक्ड आदिम प्रकार
मुख्य अंतर
पहचान बनाम। कीमत:
आदिम: उनकी कोई पहचान नहीं है; समान मान वाले दो आदिम हमेशा समान होते हैं।
पैकेज्ड: वे वस्तुएं हैं और उनकी एक पहचान है; दो वस्तुओं का मूल्य समान हो सकता है लेकिन पहचान अलग-अलग हो सकती है।
शून्य मान:
आदिम: हमेशा एक डिफ़ॉल्ट मान होता है (उदाहरण के लिए int के लिए 0)।
पैक्ड: शून्य हो सकता है, जिसे ठीक से प्रबंधित नहीं किए जाने पर NullPointerException अपवाद हो सकता है।
प्रदर्शन:
आदिम: समय और स्थान के संदर्भ में अधिक कुशल।
पैकेज्ड: अतिरिक्त वस्तुओं के निर्माण के कारण ओवरहेड का परिचय दें।
आदिम पदार्थों और पैकेजों को मिलाते समय सामान्य समस्याएं
समस्याग्रस्त उदाहरण:
ComparatornaturalOrder = (i, j) -> (i समस्या: तुलना i == j संदर्भों की तुलना करता है, मानों की नहीं।
ग़लत व्यवहार: NaturalOrder.compare(new Integer(42), new Integer(42)) 0 के बजाय 1 लौटाता है।समाधान:
Integer.
वर्ग की CompareTo विधि या उपयोगिता विधियों का उपयोग करेंComparatornaturalOrder = Integer::compare; या, मूल तुलनित्र को सही करते हुए:
ComparatornaturalOrder = (iBoxed, jBoxed) -> { int i = iBoxed; int j = jBoxed; return (i 2. ऑटोअनबॉक्सिंग और NullPointerException
पैक किए गए प्रकारों का उपयोग करते समय जो शून्य हो सकते हैं, यदि ऑब्जेक्ट शून्य है तो ऑटोअनबॉक्सिंग अपवाद फेंक सकता है।समस्याग्रस्त उदाहरण:
Integer i = null; if (i == 42) { System.out.println("Inacreditável"); }समस्या: मैं शून्य हूं; 42 के साथ तुलना करने पर, शून्य ऑटोअनबॉक्सिंग होती है, जिसके परिणामस्वरूप NullPointerException होता है।
समाधान: जब संभव हो तो आदिम प्रकारों का उपयोग करें।int i = 0; if (i == 42) { System.out.println("Inacreditável"); }3. ऑटोबॉक्सिंग/अनबॉक्सिंग के कारण ख़राब प्रदर्शन
गहन संचालन में लपेटे गए प्रकारों का अनजाने उपयोग ऑटोबॉक्सिंग और अनावश्यक ऑब्जेक्ट निर्माण के कारण प्रदर्शन में गिरावट का कारण बन सकता है।समस्याग्रस्त उदाहरण:
Long sum = 0L; for (long i = 0; iसमस्या: योग एक पैक्ड लॉन्ग है; प्रत्येक पुनरावृत्ति में, ऑटोबॉक्सिंग/अनबॉक्सिंग होती है।
प्रभाव: बहुत धीमा कोड और अत्यधिक मेमोरी उपयोग।
समाधान:
गहन संचालन में स्थानीय चर के लिए आदिम प्रकारों का उपयोग करें।long sum = 0L; for (long i = 0; iपैकेज्ड प्रकारों का उपयोग कब करें
- संग्रह: आप सामान्य संग्रहों (जैसे सूची) में आदिम प्रकारों का उपयोग नहीं कर सकते।
- जेनेरिक पैरामीटर्स: जेनेरिक प्रकार आदिम प्रकारों (जैसे थ्रेडलोकल) का समर्थन नहीं करते हैं।
- एपीआई जिन्हें ऑब्जेक्ट की आवश्यकता होती है: कुछ एपीआई को आदिम प्रकारों के बजाय ऑब्जेक्ट की आवश्यकता होती है।
अच्छे आचरण
- आदिम प्रकारों को प्राथमिकता दें: जब भी संभव हो, सरलता और दक्षता के लिए आदिम प्रकारों का उपयोग करें।
- ऑटोबॉक्सिंग/अनबॉक्सिंग से सावधान रहें: ऑटोबॉक्सिंग से शब्दाडंबर कम हो जाता है लेकिन सूक्ष्म त्रुटियां हो सकती हैं।
- रैप्ड में == के साथ तुलना करने से बचें: बराबर() जैसी विधियों का उपयोग करें या अनरैप्ड मानों की तुलना करें।
- नल की जांच करें: पैकेज्ड प्रकारों के साथ काम करते समय, ध्यान रखें कि वे शून्य हो सकते हैं और NullPointerException का कारण बन सकते हैं।
सारांश
आदिम प्रकार:
सरल और तेज़.
वे शून्य नहीं हो सकते.
उनकी कोई पहचान नहीं है (केवल मूल्य)।पैक्ड प्रकार:
संग्रह और सामान्य एपीआई में उपयोग के लिए आवश्यक।
वे शून्य हो सकते हैं।
उनके पास वस्तु पहचान है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3