ऑटोबॉक्सिंग की समस्याएँ
नल अनबॉक्सिंग और == की उलझनें
ऑटोबॉक्सिंग की समस्याएँ, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सुविधा में छिपे खतरे
स्वचालित बॉक्सिंग कोड को साफ़-सुथरा बनाती है, लेकिन यह ऐसे रूपांतरण छिपा देती है जो चौंकाने वाली त्रुटियाँ उत्पन्न कर सकते हैं। दो सबसे बड़े खतरे हैं null की अनबॉक्सिंग और == से पहचान की तुलना।
यह पाठ आपको दोनों से बचना दिखाता है।
नल अनबॉक्सिंग का खतरा
यदि किसी रैपर में null हो और आप उसे किसी आदिम प्रकार में अनबॉक्स करें, तो Java NullPointerException उत्पन्न करता है।
इसे नज़रअंदाज़ करना आसान है, क्योंकि कोड साधारण असाइनमेंट जैसा दिखाई देता है।
public class Main {
public static void main(String[] args) {
Integer maybe = null;
try {
int value = maybe;
System.out.println(value);
} catch (NullPointerException e) {
System.out.println("Cannot unbox null!");
}
}
}अंकगणित में null
यह खतरा व्यंजकों के भीतर भी सामने आता है। किसी null रैपर को जोड़ने पर पहले उसकी अनबॉक्सिंग होती है, जिससे गणना शुरू होने से पहले ही अपवाद उत्पन्न हो जाता है।
public class Main {
public static void main(String[] args) {
Integer count = null;
try {
int total = count + 5;
System.out.println(total);
} catch (NullPointerException e) {
System.out.println("Null in arithmetic!");
}
}
}null से बचाव
अनबॉक्स करने से पहले हमेशा रैपर में null की जाँच करें या कोई डिफ़ॉल्ट मान उपलब्ध कराएँ।
public class Main {
public static void main(String[] args) {
Integer maybe = null;
int safe = (maybe != null) ? maybe : 0;
System.out.println(safe);
}
}== कैश का आश्चर्य
Integer.valueOf -128 से 127 तक के मानों को कैश करता है। इसलिए उस सीमा के दो बॉक्स किए गए मान एक ही ऑब्जेक्ट साझा कर सकते हैं और == true लौटा सकता है।
public class Main {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
}
}कैश की सीमा के बाहर
कैश की सीमा से ऊपर, प्रत्येक बॉक्सिंग एक अलग ऑब्जेक्ट बनाती है। अब == संदर्भों की तुलना करता है और false लौटाता है, भले ही संख्याएँ समान हों।
public class Main {
public static void main(String[] args) {
Integer a = 200;
Integer b = 200;
System.out.println(a == b);
}
}हमेशा equals का उपयोग करें
क्योंकि रैपर पर == ऑब्जेक्ट की पहचान की तुलना करता है, इसलिए वास्तविक संख्यात्मक मानों की तुलना करने के लिए आपको .equals() का उपयोग करना चाहिए।
public class Main {
public static void main(String[] args) {
Integer a = 200;
Integer b = 200;
System.out.println(a.equals(b));
}
}== को प्रिमिटिव के साथ मिलाना
यदि == का एक पक्ष प्रिमिटिव है, तो Java रैपर से मूल मान निकाल देता है, इसलिए तुलना मान के आधार पर होती है। यह भरोसेमंद है, लेकिन रैपर के शून्य होने पर फिर भी त्रुटि उत्पन्न हो सकती है।
public class Main {
public static void main(String[] args) {
Integer a = 200;
int b = 200;
System.out.println(a == b);
}
}लूप में छिपी हुई बॉक्सिंग
लूप के संचायक को रैपर के रूप में घोषित करने पर हर पुनरावृत्ति में एक नया ऑब्जेक्ट बनता है। नीचे long के बजाय Long का उपयोग करने पर बार-बार बॉक्सिंग होगी। प्रिमिटिव को प्राथमिकता दें।
public class Main {
public static void main(String[] args) {
long sum = 0;
for (int i = 0; i < 1000; i++) {
sum += i;
}
System.out.println(sum);
}
}मानचित्र से शून्य लौटता है
वास्तविक प्रोग्रामों में होने वाली एक सामान्य त्रुटि यह है कि अनुपस्थित कुंजी के लिए Map.get null लौटाता है। उस परिणाम को int में बदलकर मूल मान निकालने पर त्रुटि उत्पन्न होती है। इसके बजाय getOrDefault का उपयोग करें।
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
int score = scores.getOrDefault("missing", 0);
System.out.println(score);
}
}सुरक्षित रहना
दो आदतें स्वचालित बॉक्सिंग की अधिकांश त्रुटियों को रोकती हैं: ऐसे मान से मूल मान कभी न निकालें जो null हो सकता है, और रैपर मानों की तुलना हमेशा == के बजाय .equals() से करें।
त्वरित जाँच
स्वचालित बॉक्सिंग की समस्याओं के बारे में अपनी जागरूकता जाँचें।
पुनरावलोकन
आपने स्वचालित बॉक्सिंग की मुख्य समस्याएँ सीखीं:
nullरैपर से मूल मान निकालने परNullPointerExceptionउत्पन्न होता है- शून्य की जाँच या डिफ़ॉल्ट मान से सुरक्षा करें
- रैपर पर
==संदर्भों की तुलना करता है, जिसमें -128 से 127 तक कैशिंग होती है - मानों की तुलना के लिए हमेशा
.equals()का उपयोग करें - मानचित्र से मान प्राप्त करते समय शून्य से बचने के लिए
getOrDefaultका उपयोग करें
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “ऑटोबॉक्सिंग की समस्याएँ” पाठ निःशुल्क है?
हाँ—“ऑटोबॉक्सिंग की समस्याएँ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“ऑटोबॉक्सिंग की समस्याएँ” में मैं क्या सीखूँगा?
नल अनबॉक्सिंग और == की उलझनें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“ऑटोबॉक्सिंग की समस्याएँ” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- प्रिमिटिव बनाम रैपर प्रकार
- ऑटोबॉक्सिंग और अनबॉक्सिंग
- पार्सिंग और Valueof
- ऑटोबॉक्सिंग की समस्याएँ