Java में प्रत्येक प्रिमिटिव प्रकार के लिए एक संगत रैपर क्लास होती है। ये रैपर क्लासेस अपरिवर्तनीय होती हैं और प्रिमिटिव मानों को ऑब्जेक्ट्स के रूप में उपयोग करने, टाइप जानकारी एक्सेस करने, और ऑटो-बॉक्सिंग/अनबॉक्सिंग को सक्षम करने की अनुमति देती हैं।
प्रिमिटिव-रैपर मैपिंग
| प्रिमिटिव | रैपर क्लास | आकार | निरंतर |
|---|---|---|---|
| byte | Byte | 8 बिट | BYTE, MIN_VALUE, MAX_VALUE |
| short | Short | 16 बिट | SIZE, BYTES, MIN_VALUE, MAX_VALUE |
| int | Integer | 32 बिट | SIZE, BYTES, MIN_VALUE, MAX_VALUE |
| long | Long | 64 बिट | SIZE, BYTES, MIN_VALUE, MAX_VALUE |
| float | Float | 32 बिट | SIZE, BYTES, MIN_VALUE, MAX_VALUE, NaN |
| double | Double | 64 बिट | SIZE, BYTES, MIN_VALUE, MAX_VALUE, NaN |
| char | Character | 16 बिट | SIZE, BYTES, MIN_VALUE, MAX_VALUE |
| boolean | Boolean | ~1 बिट | TRUE, FALSE |
रैपर ऑब्जेक्ट्स बनाने के तरीके
1. valueOf() फैक्टर मेथड (अनुशंसित)
कैशिंग का उपयोग करता है (-128 से 127 तक Integer के लिए), मौजूदा ऑब्जेक्ट्स का पुनः उपयोग करता है।
jshell> Integer i1 = Integer.valueOf(100)
i1 ==> 100
jshell> Integer i2 = Integer.valueOf(100)
i2 ==> 100
jshell> i1 == i2 // समान कैश्ड ऑब्जेक्ट!
$3 ==> true
jshell> // कैश रेंज के बाहर: नए ऑब्जेक्ट्स
jshell> Integer i3 = Integer.valueOf(1000)
i3 ==> 1000
jshell> Integer i4 = Integer.valueOf(1000)
i4 ==> 1000
jshell> i3 == i4 // अलग ऑब्जेक्ट्स
$6 ==> false
2. कंस्ट्रक्टर (डिप्रिकेटेड Java 9+)
jshell> Integer i1 = new Integer(10)
i1 ==> 10
jshell> Integer i2 = new Integer(10)
i2 ==> 10
jshell> i1 == i2 // हमेशा नए ऑब्जेक्ट्स
$3 ==> false
// चेतावनी: Java 9 से डिप्रिकेटेड
| Warning: Integer(int) in Integer has been deprecated
3. ऑटो-बॉक्सिंग (प्रिमिटिव → रैपर)
jshell> Integer i = 10 // ऑटो-बॉक्सिंग: Integer.valueOf(10)
i ==> 10
jshell> Double d = 3.14
d ==> 3.14
jshell> Boolean flag = true
flag ==> true
4. अनबॉक्सिंग (रैपर → प्रिमिटिव)
jshell> Integer i = Integer.valueOf(42)
i ==> 42
jshell> int primitive = i // अनबॉक्सिंग: i.intValue()
primitive ==> 42
jshell> // अभिव्यक्तियों में स्वचालित
jshell> int sum = i + 10
sum ==> 52
JShell सत्र: Integer स्थिरांक और यूटिलिटीज
jshell> Integer.MAX_VALUE
$5 ==> 2147483647
jshell> Integer.MIN_VALUE
$6 ==> -2147483648
jshell> Integer.SIZE
$7 ==> 32
jshell> Integer.BYTES
$8 ==> 4
jshell> Integer.BYTES * 8 == Integer.SIZE
$9 ==> true
jshell> // उपयोगी मेथड्स
jshell> Integer.toBinaryString(42)
$10 ==> "101010"
jshell> Integer.toHexString(255)
$11 ==> "ff"
jshell> Integer.parseInt("101010", 2)
$12 ==> 42
jshell> Integer.parseInt("ff", 16)
$13 ==> 255
jshell> Integer.compare(10, 20)
$14 ==> -1
jshell> Integer.sum(10, 20)
$15 ==> 30
कैशिंग व्यवहार विवरण
jshell> // Integer कैश: -128 से 127 (डिफ़ॉल्ट)
jshell> Integer cached1 = Integer.valueOf(127)
cached1 ==> 127
jshell> Integer cached2 = Integer.valueOf(127)
cached2 ==> 127
jshell> cached1 == cached2
$3 ==> true
jshell> Integer notCached1 = Integer.valueOf(128)
notCached1 ==> 128
jshell> Integer notCached2 = Integer.valueOf(128)
notCached2 ==> 128
jshell> notCached1 == notCached2
$6 ==> false
jshell> // कैश आकार JVM विकल्प के माध्यम से कॉन्फ़िगर करने योग्य:
# -XX:AutoBoxCacheMax=2000
अन्य रैपर्स के साथ JShell प्रयोग
jshell> Double d = Double.valueOf("3.14159")
d ==> 3.14159
jshell> Double.isNaN(0.0 / 0.0)
$2 ==> true
jshell> Double.POSITIVE_INFINITY
$3 ==> Infinity
jshell> Boolean b = Boolean.valueOf("true")
b ==> true
jshell> Boolean.parseBoolean("false")
$5 ==> false
jshell> Character c = Character.valueOf('A')
c ==> 'A'
jshell> Character.isDigit('5')
$7 ==> true
jshell> Character.isLetter('A')
$8 ==> true
jshell> Long l = Long.valueOf(10000000000L)
l ==> 10000000000
jshell> Long.MAX_VALUE
$10 ==> 9223372036854775807
पहचान बनाम समानता
jshell> Integer a = 1000
a ==> 1000
jshell> Integer b = 1000
b ==> 1000
jshell> a == b // पहचान: false (कैश रेंज के बाहर)
$3 ==> false
jshell> a.equals(b) // समानता: true
$4 ==> true
jshell> // सर्वोत्तम अभ्यास: तुलना के लिए हमेशा .equals() उपयोग करें
jshell> Objects.equals(a, b) // नल-सुरक्षित
$5 ==> true
प्रदर्शन नोट्स
- valueOf() प्राथमिकता दें - कैशिंग लाभ
- new Wrapper() से बचें - डिप्रिकेटेड, हमेशा नया ऑब्जेक्ट बनाता है
- ऑटो-बॉक्सिंग सावधानी: लूप में अनावश्यक ऑब्जेक्ट निर्माण
- प्रिमिटिव्स का उपयोग करें प्रदर्शन-महत्वपूर्ण कोड में (नो ऑब्जेक्ट ओवरहेड)
- कलेक्शन्स के लिए रैपर्स आवश्यक:
ListनहींList
सारांश
- प्रत्येक प्रिमिटिव के लिए एक अपरिवर्तनीय रैपर क्लास होती है
valueOf()कैशिंग के साथ ऑब्जेक्ट्स बनाता है (Integer के लिए -128 से 127)new Wrapper()डिप्रिकेटेड है (Java 9+)- ऑटो-बॉक्सिंग/अनबॉक्सिंग प्रिमिटिव↔रैपर रूपांतरण को स्वचालित करता है
- पहचान (==) के लिए नहीं, समानता (.equals()) के लिए उपयोग करें
- निरंतर: MIN_VALUE, MAX_VALUE, SIZE, BYTES