1. रैपर प्रकारों की सूची

आप जानते हैं कि जावा में 8 आदिम प्रकार हैं, जो ऐसे प्रकार हैं जो वर्ग नहीं हैं। एक ओर, यह अच्छा है - वे सरल हैं और बहुत कम जगह लेते हैं। दूसरी ओर, कभी-कभी कक्षाएं वही होती हैं जिनकी हमें आवश्यकता होती है। आपको अगले पाठ में पता चलेगा कि वास्तव में ऐसा क्यों है।

तो क्या कर सकते हैं?

जावा के पांचवें संस्करण से शुरू होकर, प्रत्येक आदिम प्रकार ने एक जुड़वां वर्ग प्राप्त किया। ऐसा प्रत्येक वर्ग एक विशिष्ट प्रकार के मान के साथ एक एकल फ़ील्ड संग्रहीत करता है। इन वर्गों को आवरण प्रकार कहा जाता है , क्योंकि वे कक्षाओं में आदिम मूल्यों को लपेटते हैं।

यहाँ इस प्रकार की एक सूची है। क्या आप किसी को जानते हैं?

आदिम प्रकार आवरण वर्ग
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

प्रिमिटिव टाइप के नाम लोअरकेस लेटर से शुरू होते हैं, लेकिन रैपर क्लासेस के नाम अपरकेस लेटर से शुरू होते हैं। कुछ वर्ग के नाम थोड़े लंबे भी हैं: Integerвmesto intи Characterвmesto char

आवरण वर्ग की सभी वस्तुएँ अपरिवर्तनीय ( अपरिवर्तनीय ) हैं।

वर्ग के लिए सरलीकृत कोड Integerकुछ इस तरह दिखता है:

कोड टिप्पणी
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}


वेरिएबल

कंस्ट्रक्टर




विधि एक मान लौटाती है




स्थैतिक विधि एक चर Integerके लिए एक नई वस्तु बनाती हैint

2. एक को intएक में बदलनाInteger

रैपर प्रकारों को उनके आदिम भाई-बहनों के समकक्ष माना जाता है: आप आसानी से एक रैपर ऑब्जेक्ट बना सकते हैं जो एक आदिम प्रकार से मेल खाती है।

आइए एक उदाहरण के रूप में int प्रकार का उपयोग यह विश्लेषण करने के लिए करें कि आदिम प्रकार उनके संबंधित आवरण प्रकार के साथ कैसे इंटरैक्ट करते हैं। intएक से एक और इसके विपरीत परिवर्तित करने के लिए कोड Integerइस तरह दिखेगा:

inta को a में बदलने के लिए Integer, आपको यह कोड लिखना होगा:

Integer name = new Integer(value);

कहाँ nameएक चर का नाम है Integer, और valueलिपटे intमूल्य है।

उदाहरण:

कोड टिप्पणी
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

और a को Integera में बदलने के लिए int, आपको यह कोड लिखना होगा:

int name = variable.intValue();

कहाँ nameएक चर का नाम है int, और एक वस्तु variableके लिए एक संदर्भ है ।Integer

उदाहरण:

कोड टिप्पणी
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

3. ऑटोबॉक्सिंग और अनबॉक्सिंग

लेकिन Integerटाइप के साथ सरल ऑपरेशन भी लिखना आसान नहीं है।

जैसा कि हमने पहले कहा, Integerप्रकार अपरिवर्तनीय ( अपरिवर्तनीय ) है। Integerएक नए मूल्य के साथ एक वस्तु बनाने के लिए int, आपको स्पष्ट रूप से एक नई Integerवस्तु बनाने की आवश्यकता है। intउस ने कहा, किसी वस्तु के अंदर संग्रहीत का मान प्राप्त करना आसान है Integer- बस intValue()विधि को कॉल करें।

उदाहरण:

कोड विवरण
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
5किसी Integerवस्तु में लपेटें वस्तु
से मूल्य प्राप्त करें एक नई वस्तु बनाएं (10 के बराबर)Integer
Integer

यह बल्कि बोझिल कोड है, क्या आपको नहीं लगता?

जावा के रचनाकारों ने ऐसा सोचा था, इसलिए उन्होंने संकलक को सिखाया कि इन कार्यों को स्वचालित रूप से कैसे किया जाए। inta से a में स्वचालित रूपांतरण को ऑटोबॉक्सिंग (स्वचालित रूप से एक बॉक्स में मूल्य डालना) Integerकहा जाता है , और रिवर्स ऑपरेशन (an को a में परिवर्तित करना ) को अनबॉक्सिंग कहा जाता है ।Integerint

तुम्हारा कोड संकलक क्या देखता है
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

ऑटोबॉक्सिंग और अनबॉक्सिंग के लिए धन्यवाद, आप intएक वैरिएबल को सुरक्षित रूप से असाइन कर सकते हैं Integerऔर इसके विपरीत। intआप और Integerप्रकार के बीच अंतर किए बिना किसी भी जटिलता के भाव लिख सकते हैं ।

उदाहरण:

कोड संकलक क्या उत्पन्न करेगा
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


4. रैपर चर की तुलना करना

ऑटोबॉक्सिंग और अनबॉक्सिंग सरल और पारदर्शी प्रक्रियाएं हैं। हम new Integer()आवश्यकतानुसार कथनों का उपयोग करते हैं, और intValue()आवश्यकतानुसार विधि को कॉल करते हैं।

प्रोग्रामर, आपके लिए सब कुछ अच्छा और आसान काम करता है। ध्यान रखें कि यदि आप a Integerऔर an की तुलना करते हैं Integer, तो तुलना संदर्भ पर आधारित होती है न कि मूल्यों पर।

कोड कंसोल आउटपुट
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

और चर मानों को संग्रहीत नहीं करते हैं a। वे वस्तुओं के संदर्भों को संग्रहीत करते हैं। इसका मतलब यह है कि यह याद रखना महत्वपूर्ण है कि उनकी सही तुलना कैसे करें:bint

गलत सही
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}