जावा और C # में एक int और Integer के बीच अंतर क्या है?


262

मैं पढ़ रहा था सॉफ्टवेयर के बारे में अधिक जोएल जब मैं में आए योएल Spolsky एक के बीच अंतर जानने प्रोग्रामर की एक विशेष प्रकार के बारे में कुछ कह रही है intऔर एक Integerमें जावा / सी # (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग बोली)।

तो अंतर क्या है?


4
C # में एक इंटेगर प्रकार नहीं है।
जुदा गेब्रियल हिमंगो

जवाबों:


247

जावा में, 'int' प्रकार एक आदिम है, जबकि 'Integer' प्रकार एक वस्तु है।

C # में, 'int' प्रकार समान है System.Int32और एक मान प्रकार है (अर्थात java 'int' की तरह)। एक पूर्णांक (किसी भी अन्य मूल्य प्रकारों की तरह ) को एक वस्तु में बॉक्सिंग ("लिपटे") किया जा सकता है ।


वस्तुओं और आदिम के बीच अंतर कुछ हद तक इस प्रश्न के दायरे से परे हैं, लेकिन संक्षेप में:

ऑब्जेक्ट बहुरूपता के लिए सुविधाएं प्रदान करते हैं, संदर्भ द्वारा पारित किए जाते हैं (या अधिक सटीक रूप से मूल्य द्वारा पारित किए गए संदर्भ होते हैं), और ढेर से आवंटित किए जाते हैं । इसके विपरीत, आदिम अपरिवर्तनीय प्रकार हैं जो मूल्य द्वारा पारित किए जाते हैं और अक्सर स्टैक से आवंटित किए जाते हैं ।


61
यह कथन कि "ऑब्जेक्ट्स [...] को संदर्भ द्वारा पारित किया गया है" भ्रामक और गलत है, IMO। यह कहना अधिक सटीक है कि "वस्तु संदर्भ मूल्य द्वारा पारित किए जाते हैं।" (इसके अलावा आदिम हमेशा स्टैक से आवंटित नहीं होते हैं - किसी वस्तु के भीतर एक आदिम क्षेत्र पर विचार करें ...)
जॉन स्कीट

5
C # कम से कम, int एक भाषा कीवर्ड है जो Int32 CLR (वास्तव में CTS) प्रकार के बराबर है।
स्कॉट डोरमैन

6
क्षमा करें, अंग्रेजी भाषा "संदर्भ द्वारा कुछ पास नहीं" करती है और "मूल्य के आधार पर किसी वस्तु के संदर्भ में" समान कथन करती है, और न ही प्रोग्रामिंग भाषा के संदर्भ में इसके समान अर्थ हैं।
एलन क्रूगर

8
-1। यह सटीक रूप से वर्णन कर सकता है कि जावा इसे कैसे संभालता है, लेकिन सी # के लिए यह स्पष्ट गलत है।
जोए

8
यह मतदान क्यों है? उत्तर गलत है। यह जावा के लिए बिल्कुल सही नहीं है, और सी # के लिए सही के करीब भी नहीं है। कोई व्यक्ति जो इसे पढ़ता है , वह उस विषय के बारे में कम जान पाता है जो उसने पहले किया था।
Thom स्मिथ

153

खैर, जावा में एक int एक आदिम है जबकि एक Integer एक Object है। मतलब, अगर आपने एक नया Integer बनाया है:

Integer i = new Integer(6);

आप i पर कुछ विधि कह सकते हैं:

String s = i.toString();//sets s the string representation of i

जबकि एक इंट के साथ:

int i = 6;

आप इस पर कोई भी विधि नहीं कह सकते, क्योंकि यह केवल एक आदिम है। इसलिए:

String s = i.toString();//will not work!!!

कोई त्रुटि उत्पन्न करेगा, क्योंकि int कोई ऑब्जेक्ट नहीं है।

int जावा में कुछ प्राथमिकताओं में से एक है (साथ में चार और कुछ अन्य)। मुझे शत-प्रतिशत यकीन नहीं है, लेकिन मैं सोच रहा हूं कि कमोबेश इंटेगर ऑब्जेक्ट में सिर्फ एक प्रॉपर्टी है और उस प्रॉपर्टी के साथ इंटरैक्ट करने के लिए तरीकों का एक पूरा गुच्छा है (उदाहरण के लिए toString () विधि)। तो इंटेगर एक इंटेंस के साथ काम करने का एक फैंसी तरीका है (बस शायद स्ट्रिंग स्ट्रिंग के समूह के साथ काम करने का एक फैंसी तरीका है)।

मुझे पता है कि जावा सी नहीं है, लेकिन चूंकि मैंने कभी सी में प्रोग्राम नहीं किया है इसलिए यह निकटतम है जो मैं उत्तर में आ सकता हूं। उम्मीद है की यह मदद करेगा!

इंटेगर ऑब्जेक्ट javadoc

इंटेगर ओजबक्ट बनाम इंट आदिम तुलना


C # int में Int32 का एक पर्यायवाची है, देखें stackoverflow.com/questions/62503/c-int-or-int32-should-i-care
ripper234

मुझे नहीं पता कि जावा है लेकिन टाइप इंटेगर नहीं है लेकिन Int32, Int64 और वे सभी स्ट्रक्चर हैं जो वैल्यू टाइप हैं। C # में प्रिमिटिव का मतलब है कि CLR टीम द्वारा FCL (फ्रेमवर्क क्लास लाइब्रेरी) में टाइप किए गए हैं और इसीलिए उन्हें प्रिमिटिव कहा जाता है। इस मामले में भी दिनांक obj को आदिम प्रकार कहा जाता है।
तारिक

37

मैं ऊपर दिए गए उत्कृष्ट उत्तरों को जोड़ूंगा, और बॉक्सिंग और अनबॉक्सिंग के बारे में बात करूंगा, और यह जावा पर कैसे लागू होता है (हालांकि C # में बहुत अधिक है)। मैं सिर्फ जावा शब्दावली का उपयोग करूंगा क्योंकि मैं इसके साथ अधिक अउ फेट हूं ।

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

जावा 5 के बाद ऑटो-बॉक्सिंग और ऑटो-अनबॉक्सिंग नाम की कोई चीज होती है, जो पर्दे के पीछे बॉक्सिंग / अनबॉक्सिंग की अनुमति देती है। तुलना और इसके विपरीत: जावा 5 संस्करण:

Deque<Integer> queue;

void add(int n) {
    queue.add(n);
}

int remove() {
    return queue.remove();
}

जावा 1.4 या इससे पहले (कोई जेनरिक भी नहीं):

Deque queue;

void add(int n) {
    queue.add(Integer.valueOf(n));
}

int remove() {
    return ((Integer) queue.remove()).intValue();
}

यह ध्यान दिया जाना चाहिए कि जावा 5 संस्करण में संक्षिप्तता के बावजूद, दोनों संस्करण समान बायोटेक उत्पन्न करते हैं। इस प्रकार, हालांकि ऑटो-बॉक्सिंग और ऑटो-अनबॉक्सिंग बहुत सुविधाजनक हैं क्योंकि आप कम कोड लिखते हैं, ये ऑपरेशन करते हैं पर्दे के पीछे होता है, एक ही क्रम लागत के साथ है, तो आप अभी भी अपने अस्तित्व के बारे में पता होना चाहिए।

उम्मीद है की यह मदद करेगा!


2
डेका जावा 1.5 या 1.4 में नहीं है। यह 1.6 में जोड़ा गया था।
सिंह इयोजन

28

मैं अभी यहाँ पोस्ट करूँगा क्योंकि कुछ अन्य पोस्ट C # के संबंध में थोड़े गलत हैं।

सही: के int लिए एक उपनाम है System.Int32
गलत: के float लिए एक उपनाम नहीं है System.Float, लेकिन के लिएSystem.Single

मूल रूप से, int C # प्रोग्रामिंग भाषा में एक आरक्षित कीवर्ड है, और System.Int32मूल्य प्रकार के लिए एक उपनाम है ।

फ्लोट और फ्लोट समान नहीं हैं, क्योंकि '' float'' के लिए सही सिस्टम प्रकार System.Single है। इस प्रकार कुछ ऐसे कीवर्ड हैं, जिनके पास आरक्षित कीवर्ड हैं जो सीधे टाइप नामों से मेल नहीं खाते हैं।

C # में, '' int'' और '' System.Int32'', या किसी अन्य जोड़े या कीवर्ड / सिस्टम के प्रकारों में कोई अंतर नहीं है , सिवाय इसके कि जब वह शत्रु को परिभाषित करे। Enums के साथ आप उपयोग करने के लिए भंडारण आकार निर्दिष्ट कर सकते हैं और इस मामले में आप केवल आरक्षित कीवर्ड का उपयोग कर सकते हैं, न कि सिस्टम रनटाइम प्रकार का नाम।

इंट में मूल्य को मिटाना स्टैक पर, मेमोरी में या एक संदर्भित हीप ऑब्जेक्ट के रूप में संग्रहीत किया जाएगा जो संदर्भ पर निर्भर करता है और आप इसका उपयोग कैसे करते हैं।

एक विधि में यह घोषणा:

int i;

अनुकूलन के आधार पर, एक रजिस्टर में या स्टैक पर रहने वाले iप्रकार के एक चर को परिभाषित करता है System.Int32। एक प्रकार (संरचना या वर्ग) में समान घोषणा सदस्य क्षेत्र को परिभाषित करती है। विधि तर्क सूची में समान घोषणा एक पैरामीटर को परिभाषित करती है, जिसमें स्थानीय चर के समान भंडारण विकल्प होते हैं। (ध्यान दें कि यह पैराग्राफ मान्य नहीं है यदि आप मिश्रण में पुनरावृत्त तरीकों को खींचना शुरू करते हैं, तो ये अलग-अलग जानवर हैं)

हीप ऑब्जेक्ट प्राप्त करने के लिए, आप बॉक्सिंग का उपयोग कर सकते हैं:

object o = i;

यह iढेर पर सामग्री की एक बॉक्सिंग प्रतिलिपि बनाएगा । आईएल में आप सीधे हीप ऑब्जेक्ट पर तरीकों का उपयोग कर सकते हैं, लेकिन सी # में आपको इसे वापस एक इंट में डालने की जरूरत है, जो एक और कॉपी बनाएगा। इस प्रकार, ढेर पर ऑब्जेक्ट को आसानी से एक नया इंट वैल्यू की नई बॉक्सिंग कॉपी बनाए बिना C # में नहीं बदला जा सकता है। (ऊ, यह पैराग्राफ वह सब आसानी से नहीं पढ़ता है।)


19

जावा 1.5 के बारे में और ऑटोबॉक्सिंग के बारे में एक महत्वपूर्ण "क्वर्क" है जो इंटगर ऑब्जेक्ट्स की तुलना करते समय खेलने के लिए आता है।

जावा में, पूर्णांक मूल्यों के साथ वस्तुओं -128 127 को अपरिवर्तनीय (यह है कि, एक विशेष पूर्णांक मान के लिए, 23 का कहना है कि कर रहे हैं, सभी पूर्णांक अपने कार्यक्रम के माध्यम से मूल्य के साथ 23 अंक के instantiated वस्तुओं सटीक एक ही वस्तु)।

उदाहरण, यह सच है:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //  true

जबकि यह गलत है:

Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); //  false

== संदर्भ द्वारा तुलना (चर एक ही वस्तु को इंगित करता है)।

यह परिणाम आपके द्वारा उपयोग किए जा रहे JVM के आधार पर भिन्न हो सकता है या नहीं भी हो सकता है। जावा 1.5 के लिए विनिर्देशन ऑटोबॉक्सिंग के लिए आवश्यक है कि पूर्णांक (-128 से 127) हमेशा एक ही आवरण वस्तु के लिए बॉक्स हो।

एक तरकीब? =) पूर्णांक वस्तुओं की तुलना करते समय हमेशा Integer.equals () पद्धति का उपयोग करना चाहिए।

System.out.println(i1.equals(i2)); //  true

पर अधिक जानकारी java.net पर उदाहरण bexhuff.com


3
नए ऑपरेटर के साथ बनाई गई वस्तुएं हमेशा == की तुलना में झूठी वापस आएंगी। एंड्रियास नए इंटीजर (इंट) के साथ Integer.valueOf (int) को भ्रमित कर रहा है
McDowell

1
नोट: डिफ़ॉल्ट मान 127से प्राप्त की हैsun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
KNU

1
@andnil - मैं बीटल के साथ स्टेलर में काम करता हूं। वह bexhuff.com संदर्भ के लिए +1 उद्धृत करने के लिए एक बहुत अच्छा संसाधन है!
bcar


19

जावा में जेवीएम में दो बुनियादी प्रकार हैं । 1) आदिम प्रकार और 2) संदर्भ प्रकार। int एक आदिम प्रकार है और Integer एक वर्ग प्रकार (जो संदर्भ प्रकार की तरह है)।

आदिम मूल्य अन्य आदिम मूल्यों के साथ राज्य को साझा नहीं करते हैं। एक चर जिसका प्रकार एक आदिम प्रकार है, हमेशा उस प्रकार का एक आदिम मान रखता है।

int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4

एक वस्तु एक गतिशील रूप से निर्मित वर्ग उदाहरण या एक सरणी है। संदर्भ मूल्य (अक्सर सिर्फ संदर्भ) इन वस्तुओं के लिए संकेत और एक विशेष अशक्त संदर्भ है, जो किसी भी वस्तु को संदर्भित करता है। एक ही वस्तु के कई संदर्भ हो सकते हैं।

Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the 
                                 // same object as aNumber

जावा में भी सब कुछ मूल्य द्वारा पारित किया गया है। वस्तुओं के साथ जो मूल्य पारित किया जाता है वह ऑब्जेक्ट का संदर्भ है। इसलिए java में int और Integer के बीच एक और अंतर यह है कि उन्हें मेथड कॉल में कैसे पास किया जाता है। में उदाहरण के लिए

public int add(int a, int b) {
    return a + b;
}
final int two = 2;
int sum = add(1, two);

चर दो को आदिम पूर्णांक प्रकार के रूप में पारित किया गया है 2. जिसमें

public int add(Integer a, Integer b) {
    return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);

चर दो एक ऑब्जेक्ट के संदर्भ के रूप में पारित किया जाता है जो पूर्णांक मान 2 रखता है।


@WolfmanDragon: संदर्भ के अनुसार पास की तरह काम करेगा:

public void increment(int x) {
  x = x + 1;
}
int a = 1;
increment(a);
// a is now 2

जब वेतन वृद्धि को कहा जाता है तो यह एक संदर्भ (पॉइंटर) को एक चर के रूप में पारित करता है । और वेतन वृद्धि समारोह सीधे चर को संशोधित करता है

और वस्तु प्रकारों के लिए यह निम्नानुसार काम करेगा:

public void increment(Integer x) {
  x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2

क्या आपको अब अंतर दिखाई देता है?


आपकी परिभाषा के अनुसार, संदर्भ से कोई पास नहीं है। जो कुछ भी पारित किया जाता है उसका मूल्य होना चाहिए (यहां तक ​​कि अशक्त होना भी एक मूल्य है), भले ही यह सूचक का सिर्फ एक मूल्य हो, अन्यथा यह सिर्फ एक खाली सेट है। CS शब्दों के अनुसार, संदर्भ द्वारा पास संदर्भ (पॉइंटर) के मान से गुजर रहा है। मैं थोड़ा उलझन में हूँ।?
वोल्फमैनड्रैगन

11

C # में int सिर्फ एक उपनाम है System.Int32, जिसके लिए स्ट्रिंग System.String, System.Doubleआदि के लिए डबल ...

व्यक्तिगत रूप से मैं int, string, double, इत्यादि पसंद करता हूँ क्योंकि उन्हें using System;कथन की आवश्यकता नहीं होती है :) एक मूर्खतापूर्ण कारण, मुझे पता है ...


2
और इसे जोड़ा जाना चाहिए, C # का int / Int32 Java के Integer के समान नहीं है।
जुडाह गेब्रियल हिमंगो

10

रैपर कक्षाओं का उपयोग करने के कई कारण हैं:

  1. हमें अतिरिक्त व्यवहार मिलता है (उदाहरण के लिए हम विधियों का उपयोग कर सकते हैं)
  2. हम शून्य मानों को स्टोर कर सकते हैं जबकि प्राइमिटिव्स में हम नहीं कर सकते
  3. संग्रह वस्तुओं के भंडारण का समर्थन करता है और न कि आदिम।

8

यह जावा के लिए पहले ही उत्तर दिया जा चुका है, यहाँ C # उत्तर है:

C # में "पूर्णांक" एक मान्य प्रकार का नाम नहीं है और "int" केवल System.Int32 के लिए एक उपनाम है। इसके अलावा, Java (या C ++) के विपरीत C # में कोई विशेष आदिम प्रकार नहीं हैं, C # में प्रत्येक प्रकार का उदाहरण (int सहित) एक ऑब्जेक्ट है। यहां कुछ प्रदर्शनकारी कोड दिए गए हैं:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}

2
स्पष्ट होने के लिए, C # में, साथ ही System.Int32 ऑब्जेक्ट नहीं हैं। वे मूल्य प्रकार हैं और सीएलआर द्वारा वस्तुओं की तुलना में बहुत अलग तरीके से व्यवहार किया जाता है।
पीटर मेयर

4
दरअसल, C # Int32 में एक ऑब्जेक्ट है। यह एक वैल्यूएटाइप स्ट्रक्चर ऑब्जेक्ट है जो कि system.object से निकलता है। यह विशेष रूप से अन्य मूल्य वस्तुओं से अलग नहीं माना जाता है क्योंकि "इंट" जावा में होगा।
वेज

8

int का उपयोग आदिम चर को घोषित करने के लिए किया जाता है

e.g. int i=10;

इंटेगर का उपयोग क्लास इंटेगर के संदर्भ चर बनाने के लिए किया जाता है

Integer a = new Integer();

8

जावा जैसे प्लेटफार्मों में, intआदिम हैं जबकि Integerएक ऑब्जेक्ट है जो एक पूर्णांक फ़ील्ड रखता है। महत्वपूर्ण अंतर यह है कि आदिम हमेशा मूल्य के आसपास से पारित किए जाते हैं और परिभाषा से अपरिवर्तनीय होते हैं।

एक आदिम चर में शामिल कोई भी ऑपरेशन हमेशा एक नया मूल्य देता है। दूसरी ओर, वस्तुओं को संदर्भ द्वारा पास किया जाता है। कोई यह तर्क दे सकता है कि वस्तु (AKA संदर्भ) का बिंदु भी मूल्य के आसपास से गुजर रहा है, लेकिन सामग्री नहीं है।


@peter मोर्टेंस, कैसे करता है (int a; Integer a;) कार्यक्रम को प्रभावित करता है, मेरा मतलब है कि वे निष्पादन के दौरान कैसे अंतर करते हैं।
अनुज मसंद

7

एक और बात जो मुझे पिछले उत्तरों में नहीं दिखती है: जावा में इंटेगर, डबल, फ्लोट, बुलियन ... और स्ट्रिंग जैसे आदिम रैपर क्लासेस को अपरिवर्तनीय माना जाता है, ताकि जब आप उन कक्षाओं का एक उदाहरण पास करें विधि आपके डेटा को किसी भी तरह से बदल नहीं सकती है, अधिकांश अन्य वर्गों के साथ opositión में, जिसे आंतरिक डेटा को अपने सार्वजनिक तरीकों से बदला जा सकता है। ताकि इस वर्ग के पास केवल 'गेट्टर' विधियां हों, कोई 'सेटलर्स' न हों, इसके अलावा कंस्ट्रक्टर।

एक जावा कार्यक्रम में स्ट्रिंग शाब्दिकों को ढेर स्मृति के एक अलग हिस्से में संग्रहीत किया जाता है, केवल उन उदाहरणों का पुन: उपयोग करने के लिए स्मृति को बचाने के लिए, शाब्दिक के लिए एक उदाहरण है।


7

क्या आपने पहले कभी प्रोग्राम किया है (int) उन आदिम प्रकारों में से एक है जिन्हें आप अपने चर के लिए निर्धारित कर सकते हैं (जैसे चार, फ्लोट, ...)।

लेकिन इंटेगर एक रैपर क्लास है जिसका उपयोग आप इंट चर पर कुछ कार्यों को करने के लिए कर सकते हैं (जैसे इसे स्ट्रिंग या वाइज़ वर्सा में परिवर्तित करें ...), लेकिन ध्यान रखें कि रैपर क्लासेस की विधियाँ स्थिर हैं ताकि आप उनका उपयोग कर सकें। कभी भी इंटेगर क्लास का उदाहरण बनाए बिना। एक पुनरावृत्ति के रूप में:

int x;
Integer y; 

x और y दोनों प्रकार के प्रकार के int हैं, लेकिन y को Integer class द्वारा लपेटा गया है और इसमें कई विधियाँ हैं, जिनका आप उपयोग करते हैं, लेकिन मुझे लगता है कि आपको Integer आवरण वर्ग के कुछ कार्यों को कॉल करने की आवश्यकता है जो आप इसे बस कर सकते हैं।

Integer.toString(x);

लेकिन इस बात से अवगत रहें कि x और y दोनों एक प्रकार से उभरे हुए हैं, लेकिन यदि आप उन्हें एक आदिम प्रकार के रूप में उपयोग करना चाहते हैं, तो सरल रूप का उपयोग करें (x को परिभाषित करने के लिए उपयोग किया जाता है)।


7

जावा:

int, double , long, byte, float, double, short, boolean, char- पुरातन। भाषा द्वारा समर्थित बुनियादी डेटा प्रकारों को रखने के लिए उपयोग किया जाता है। आदिम प्रकार ऑब्जेक्ट पदानुक्रम का हिस्सा नहीं हैं, और वे ऑब्जेक्ट वारिस नहीं करते हैं। Thet'be एक विधि के संदर्भ में पारित कर सकते हैं।

Double, Float , Long, Integer, Short, Byte, Character, और Boolean, टाइप रैपर, में पैक कर रहे हैं java.lang। सभी संख्यात्मक प्रकार के रैपर निर्माणकर्ताओं को परिभाषित करते हैं जो किसी दिए गए मूल्य से एक वस्तु का निर्माण करने की अनुमति देते हैं, या उस मूल्य का एक स्ट्रिंग प्रतिनिधित्व करते हैं। वस्तुओं का उपयोग करना गणनाओं के सबसे सरल से भी एक उपरि जोड़ सकता है।

JDK 5 के साथ शुरुआत करते हुए, जावा में दो बहुत ही उपयोगी विशेषताएं शामिल हैं: ऑटोबॉक्सिंग और ऑटोऑनबॉक्सिंग। ऑटोबॉक्सिंग / अनबॉक्सिंग कोड को बहुत सरल और सुव्यवस्थित करता है जो कि आदिम प्रकारों को वस्तुओं में बदलना चाहिए, और इसके विपरीत।

निर्माणकर्ताओं का उदाहरण:

Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException

बॉक्सिंग / अनबॉक्सिंग का उदाहरण:

class ManualBoxing {
        public static void main(String args[]) {
        Integer objInt = new Integer(20);  // Manually box the value 20.
        int i = objInt.intValue();  // Manually unbox the value 20
        System.out.println(i + " " + iOb); // displays 20 20
    }
}

ऑटोबॉक्सिंग / ऑटो-बॉक्सिंग का उदाहरण:

class AutoBoxing {
    public static void main(String args[]) {
        Integer objInt = 40; // autobox an int
        int i = objInt ; // auto-unbox
        System.out.println(i + " " + iOb); // displays 40 40
    }
}

पीएस हर्बर्ट शिल्ड्ट की पुस्तक को एक संदर्भ के रूप में लिया गया था।


4

एक int वैरिएबल 32 बिट हस्ताक्षरित पूर्णांक मान रखता है। एक इंटेगर (पूंजी I के साथ) एक वस्तु (वर्ग) प्रकार की वस्तु का संदर्भ रखता है, जो पूर्णांक या अशक्त है।

जावा स्वचालित रूप से दोनों के बीच कास्ट करता है; जब भी इंटेगर ऑब्जेक्ट इंट ऑपरेटर के लिए तर्क के रूप में होता है या इंटिजियर चर के लिए असाइन किया जाता है, तो इंटिजर से इंट को इंटर्ग्रेट किया जाता है। इस कास्टिंग को बॉक्सिंग / अनबॉक्सिंग कहा जाता है।

यदि एक पूर्णांक चर संदर्भित संदर्भित अशक्त, स्पष्ट रूप से या निहित है, तो NullPointerException को फेंक दिया जाता है।


4

जावा और C # में एक int और Integer दो अलग-अलग शब्द हैं जिनका उपयोग विभिन्न चीजों को दर्शाने के लिए किया जाता है। यह उन आदिम डेटा प्रकारों में से एक है जो एक चर को सौंपा जा सकता है जो वास्तव में स्टोर कर सकता है। एक समय में इसके घोषित प्रकार का एक मूल्य।

उदाहरण के लिए:

int number = 7;

intचर संख्या के लिए निर्दिष्ट डेटाटाइप कहाँ है जो मान सात रखता है। अतः intएक आदिम एक वस्तु नहीं है।

जबकि Integerएक आदिम डेटा प्रकार के लिए एक आवरण वर्ग है जिसमें स्थिर विधियां हैं। यह एक विधि के तर्क के रूप में उपयोग किया जा सकता है जिसके लिए एक वस्तु की आवश्यकता होती है, जहां int का उपयोग उस विधि के तर्क के रूप में किया जा सकता है जिसे पूर्णांक मान की आवश्यकता होती है, जिसका उपयोग अंकगणितीय अभिव्यक्ति के लिए किया जा सकता है।

उदाहरण के लिए:

Integer number = new Integer(5);

4

दोनों भाषाओं में (जावा और C #) int4-बाइट पर हस्ताक्षर किए पूर्णांक है।

जावा के विपरीत, C # हस्ताक्षरित और अहस्ताक्षरित पूर्णांक मान दोनों प्रदान करता है। जैसा कि जावा और सी # ऑब्जेक्ट ऑब्जेक्ट ओरिएंटेड हैं, इन भाषाओं में कुछ ऑपरेशन रन टाइम द्वारा दिए गए निर्देशों पर सीधे मैप नहीं होते हैं और इसलिए उन्हें किसी प्रकार के ऑब्जेक्ट के हिस्से के रूप में परिभाषित करने की आवश्यकता होती है।

C # System.Int32वह मेमोरी प्रकार प्रदान करता है जो मेमोरी के एक भाग का उपयोग करता है जो कि ढेर पर संदर्भ प्रकार से संबंधित होता है।

जावा प्रदान करता है java.lang.Integerजो एक संदर्भ प्रकार पर काम करता है int। में तरीकों Integerनहीं कर सकते बार चलाने के लिए सीधे संकलित किया जा instructions.So हम इसे पूर्णांक का एक उदाहरण में तब्दील और तरीकों (जैसे जो कुछ प्रकार के उदाहरण की उम्मीद उपयोग करने के लिए एक पूर्णांक मूल्य बॉक्स toString(), parseInt(), valueOf()आदि)।

C # वेरिएबल int में System.Int32.Any4-बाइट वैल्यू को मेमोरी में प्रिमिटिव इंट के रूप में समझा जा सकता है, जिसे System.Int32.S के उदाहरण से जोड़-तोड़ किया जा सकता है। System.Int32.Whenइंटिजर पूर्णांक से संबंधित विधियों जैसे int.Parse(), int.ToString()आदि का उपयोग करने के लिए एक उपनाम है । एफसीएल System.Int32संरचना संबंधित तरीकों को बुला रही है Int32.Parse(), जैसे Int32.ToString()


4

जावा में, intप्रकार एक आदिम डेटा प्रकार है, जहां Integerप्रकार एक वस्तु है।

C # में, intप्रकार भी एक डेटा प्रकार है System.Int32। एक integer(किसी भी अन्य मूल्य प्रकार की तरह) एक वस्तु में बॉक्सिंग ("लिपटे") किया जा सकता है।


3

जावा में एक आदिम डेटा प्रकार है जबकि इंटेगर एक सहायक वर्ग है, इसका उपयोग एक डेटा प्रकार को दूसरे में बदलने के लिए किया जाता है।

उदाहरण के लिए:

double doubleValue = 156.5d;
Double doubleObject  = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();

आदिम डेटा प्रकार सबसे तेजी से उपलब्ध मेमोरी को स्टोर करते हैं जहां हेल्पर क्लास जटिल है और हीप मेमोरी में स्टोर है।

"डेविड गैसनर" जावा आवश्यक प्रशिक्षण से संदर्भ।


2

"int" जावा में रैपर क्लास में आदिम डेटा-प्रकार और "इंटेगर" है। "इंटेगर" को एक विधि के तर्क के रूप में उपयोग किया जा सकता है जिसके लिए एक वस्तु की आवश्यकता होती है, जहां "int" का उपयोग एक तर्क के रूप में किया जा सकता है जिसमें एक पूर्णांक मान की आवश्यकता होती है, जिसका उपयोग अंकगणितीय अभिव्यक्ति के लिए किया जा सकता है।


1

01. पूर्णांक शून्य हो सकता है। लेकिन int शून्य नहीं हो सकता।

Integer value1 = null; //OK

int value2 = null      //Error

02. केवल Wrapper Classes को किसी भी कलेक्शन क्लास में मान टाइप कर सकते हैं।

(रैपर क्लासेस - बुलियन, कैरेक्टर, बाइट, शॉर्ट, इंटेगर, लॉन्ग, फ्लोट, डबल)

List<Integer> element = new ArrayList<>();
int valueInt = 10;
Integer  valueInteger = new Integer(value);
element.add(valueInteger);

लेकिन आम तौर पर हम संग्रह वर्ग में आदिम मूल्यों को जोड़ते हैं? क्या बिंदु 02 सही है?

List<Integer> element = new ArrayList<>();
element.add(5);

हाँ 02 सही है, बीकॉस autoboxing.

ऑटोबॉक्सिंग स्वचालित रूपांतरण है जो जावा कंपाइलर आदिम प्रकार और उनके संबंधित आवरण वर्ग के बीच बनाता है।

फिर 5 ऑटोबॉक्सिंग द्वारा इंटिजर मूल्य के रूप में परिवर्तित होते हैं।


1

int लायब्रेरी फ़ंक्शन c # में पूर्वनिर्धारित है, लेकिन जावा में हम ऑब्जेक्ट बना सकते हैं Integer


0

(जावा संस्करण) सरल शब्दों में int आदिम है और Integer int के लिए आवरण वस्तु है।

एक उदाहरण जहां इंटेगर बनाम इंट का उपयोग करना है, जब आप तुलना करना चाहते हैं और फिर से चर को अंतर करते हैं तो यह त्रुटि फेंक देगा।

int a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is wrong - cannot compare primitive to null
{
do something...}

Instead you will use,
Integer a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is correct/legal
{ do something...}

0

मेरी जानकारी के अनुसार जावा में यदि आप शिक्षार्थी हैं, जब आप int लिखते हैं; फिर जावा जेनेरिक में यह कोड की तरह संकलित करेगा Integer a = new Integer()। इसलिए, जैसा कि जेनेरिक Integerका उपयोग नहीं किया जाता है, लेकिन intइसका उपयोग किया जाता है। इसलिए वहां इतना अंतर है।


इस सवाल के 18 अन्य उत्तर हैं। क्या आपका कुछ ऐसा है जो दूसरों को याद है? यह मदद नहीं करता है कि यह व्याकरणिक के साथ शुरू करने के लिए नहीं है।
तेयपेम सेप

0

int एक आदिम डेटा प्रकार है। इंटेगर एक रैपर क्लास है। यह इंट डेटा को ऑब्जेक्ट के रूप में स्टोर कर सकता है।


0

int एक आदिम डेटाटाइप है जबकि इंटेगर एक ऑब्जेक्ट है। इंटेगर के साथ एक ऑब्जेक्ट बनाने से आपको उन सभी तरीकों तक पहुंच प्राप्त होगी जो इंटेगर क्लास में उपलब्ध हैं। लेकिन, यदि आप इंट के साथ एक आदिम डेटा प्रकार बनाते हैं, तो आप उन विधियों का उपयोग नहीं कर पाएंगे और आपको उन्हें खुद से परिभाषित करना होगा। लेकिन, यदि आप कोई अन्य तरीके नहीं चाहते हैं और प्रोग्राम को अधिक मेमोरी कुशल बनाना चाहते हैं, तो आप आदिम डेटाटाइप के साथ जा सकते हैं क्योंकि ऑब्जेक्ट बनाने से मेमोरी की खपत बढ़ जाएगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.