# रैपर क्लास व ऑटोबॉक्सिंग — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-wrapper-autoboxing

> हर प्रिमिटिव के ऑब्जेक्ट रैपर से मिलें, देखें ऑटोबॉक्सिंग/अनबॉक्सिंग कैसे अपने-आप बदलते हैं, और बॉक्स्ड Integer के साथ == के क्लासिक जाल को समझें।

## हर प्रिमिटिव के लिए एक रैपर

`int→Integer`, `double→Double`, `boolean→Boolean`, `char→Character` आदि। रैपर पूर्ण ऑब्जेक्ट हैं: ये `null` हो सकते हैं, कलेक्शन में रखे जा सकते हैं (जो सिर्फ़ ऑब्जेक्ट रखते हैं), और `Integer.MAX_VALUE`, `Integer.parseInt(...)` जैसे उपयोगी स्टैटिक्स रखते हैं।

## ऑटोबॉक्सिंग व अनबॉक्सिंग

कम्पाइलर ज़रूरत पड़ने पर प्रिमिटिव ↔ रैपर को चुपचाप बदलता है — जैसे `List<Integer>` में डालते या निकालते समय। सुविधाजनक है, पर हर बॉक्सिंग एक ऑब्जेक्ट बनाती है, जो टाइट लूप में मायने रखता है।

```java
List<Integer> nums = new ArrayList<>();
nums.add(5);            // autobox: int -> Integer
int first = nums.get(0); // unbox: Integer -> int

Integer boxed = null;
// int bad = boxed;     // NullPointerException at unboxing!
```

## Integer == का जाल

Java बॉक्स्ड `Integer` मानों को **-128 से 127** तक कैश करता है, इसलिए छोटे मान संयोग से `==` से बराबर मिल सकते हैं जबकि बड़े नहीं। यह एक implementation डिटेल है, गारंटी नहीं — रैपर तुलना के लिए हमेशा `.equals()` (या `int` में अनबॉक्स) उपयोग करें।

```java
Integer a = 100, b = 100;
System.out.println(a == b);   // true  (cached)

Integer x = 200, y = 200;
System.out.println(x == y);   // false (not cached!)
System.out.println(x.equals(y)); // true — always correct
```

त्वरित जाँच

**Quiz:** दो Integer ऑब्जेक्ट के बराबर मान की सबसे सुरक्षित तुलना कैसे करें?

- [ ] Integer के लिए == हमेशा काम करता है
- [x] .equals(), या पहले दोनों को int में अनबॉक्स करें
- [ ] सिर्फ़ compareTo(), कभी equals() नहीं
- [ ] इनकी तुलना कभी नहीं हो सकती

*Answer:* .equals(), या पहले दोनों को int में अनबॉक्स करें. == रेफ़रेंस तुलना करता है और सिर्फ़ छोटे कैश्ड दायरे (-128..127) में संयोग से सही काम करता है। .equals() (या प्रिमिटिव int मानों की तुलना) हमेशा सही है।
