किसी वस्तु को इंट में कैसे डालना है


221

मैं जावा में इंट को ऑब्जेक्ट कैसे डाल सकता हूं?


6
आप वास्तव में क्या करना चाहते हैं? यदि Objectकोई नहीं है Integer, तो मुझे यकीन नहीं है कि आपके कलाकारों से आपकी क्या अपेक्षा है।
अनहेल्सीपामलर

2
पहले Instof कीवर्ड से चेक करें। अगर सच है तो इसे कास्ट करें।
मृत प्रोग्रामर

ओह। मैं केवल एनम सदस्यों को विशिष्ट पूर्णांक मानों के लिए तैयार करना चाहता था, ताकि मैं वाइनपी कॉन्स्टेंट्स के लिए एनाम रख सकूं। msdn.microsoft.com/en-us/library/windows/desktop/…
Tomáš Zato - मोनिका

@ TomášZato आप ऐसा कर सकते हैं (जैसे), अपने पूर्णांक मान को मानने के लिए अपने एनुम में एक फ़ील्ड को परिभाषित करें (कहते हैं intValue), अपने एनम के लिए एक कंस्ट्रक्टर बनाएं जो सेट करता है intValue, आपके एनम स्थिरांक ने उस निर्माता को आमंत्रित किया है, और एक गेट्टर जोड़ें के लिए intValue। फिर, कास्टिंग के बजाय, गेट्टर को कॉल करें।
ब्रायन मैककुटन

जवाबों:


385

यदि आप सुनिश्चित हैं कि यह वस्तु एक है Integer:

int i = (Integer) object;

या, जावा 7 से शुरू, आप समान रूप से लिख सकते हैं:

int i = (int) object;

खबरदार, यह फेंक सकता है ClassCastExceptionअगर आपकी वस्तु एक नहीं है Integerऔर NullPointerExceptionयदि आपकी वस्तु है null

इस तरह से आप मान लेते हैं कि आपका ऑब्जेक्ट एक इंटेगर (लिपटा हुआ इंट) है और आप इसे इंट में अनबॉक्स करते हैं।

intएक आदिम है, इसलिए इसे एक के रूप में संग्रहीत नहीं किया जा सकता है Object, एकमात्र तरीका एक intमाना जाता है / Integerफिर एक के रूप में संग्रहीत के रूप में बॉक्सिंग किया जाता है Object


यदि आपकी वस्तु एक है String, तो आप Integer.valueOf()इसे सरल इंट में बदलने के लिए विधि का उपयोग कर सकते हैं :

int i = Integer.valueOf((String) object);

यह फेंक सकता है NumberFormatExceptionयदि आपकी वस्तु वास्तव Stringमें सामग्री के रूप में पूर्णांक के साथ नहीं है।


संसाधन:

एक ही विषय पर:


क्या आप NullPointerException के बारे में निश्चित हैं? मैंने सोचा था कि एक अशक्त वस्तु बस एक अशक्त पूर्णांक पैदा करेगी ....
एटिएन डे मार्टेल

7
NullPointerExceptionके unboxing के दौरान हो जाएगा Integerमेंint
कॉलिन हेबर्ट

आप किसी इंट में नहीं जा रहे हैं, कोई भी वस्तु कभी भी इंट में नहीं डाली जा सकती है। आप वास्तव में इंटगर के लिए हैं और फिर एक int के लिए autoboxing।
स्टीव कू

1
@ सेते कुओ, हां, बिल्कुल वही जो मैं कह रहा हूं। इसलिए मैंने "कास्ट" शब्द का उपयोग नहीं किया।
कोलिन हेबर्ट सेप

@ एटिनेन: आप एक नॉगट ऑब्जेक्ट को एक पूर्णांक में डाल सकते हैं, इस प्रकार एक अशक्त पूर्णांक प्राप्त कर सकते हैं। लेकिन जब आप इसमें से इंट निकालने की कोशिश करते हैं, तो आपको एक शून्य सूचक अपवाद मिलेगा। "नल इंट" जैसी कोई चीज नहीं है।
जे

18

वस्तु को वस्तु मान लें Integer, तो आप ऐसा कर सकते हैं:

int i = ((Integer) obj) .intValue ();

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


यदि obj अशक्त है तो यह NullPointerException को फेंक देगा।
कॉलिन हेबर्ट सेप

और एक ClassCastException अगर यह एक पूर्णांक वस्तु नहीं है।
एलिक रॉबर्टसन

1
intValueऑटोबॉक्सिंग के लिए आह्वान करने की कोई आवश्यकता नहीं है ।
ऑस्करराइज़

1
intValueविशेष रूप intसे विनिमेय होने के बीच शुरुआती भ्रम को देखते हुए बहुत स्पष्ट है Integer
स्टीव कू

14

परिदृश्य 1: साधारण मामला

यदि यह गारंटी दी जाती है कि आपकी वस्तु एक है Integer, तो यह सरल तरीका है:

int x = (Integer)yourObject;

परिदृश्य 2: कोई संख्यात्मक वस्तु

जावा Integerमें Long, BigIntegerआदि सभी Numberइंटरफ़ेस को लागू करते हैं जिसमें एक विधि का नाम है intValue। संख्यात्मक पहलू के साथ किसी अन्य कस्टम प्रकार को भी लागू करना चाहिए Number(उदाहरण के लिए:) Age implements Number। तो तुम कर सकते हो:

int x = ((Number)yourObject).intValue();

परिदृश्य 3: पार्स संख्यात्मक पाठ

जब आप कमांड लाइन (या पाठ क्षेत्र आदि) से उपयोगकर्ता इनपुट स्वीकार करते हैं तो आप इसे एक के रूप में प्राप्त करते हैं String। इस मामले में आप उपयोग कर सकते हैं Integer.parseInt(String string):

String input = someBuffer.readLine();
int x = Integer.parseInt(input);

यदि आपको इनपुट मिलता है Object, तो आप इसका उपयोग कर सकते हैं (String)input, या, यदि इसका कोई अन्य पाठ प्रकार हो सकता है input.toString():

int x = Integer.parseInt(input.toString());

दृश्य 4: पहचान हैश

जावा में कोई संकेत नहीं हैं। हालाँकि Objectइसके लिए एक पॉइंटर जैसा डिफ़ॉल्ट कार्यान्वयन है hashCode(), जो सीधे उपलब्ध है System.identityHashCode(Object o)। तो तुम कर सकते हो:

int x = System.identityHashCode(yourObject);

ध्यान दें कि यह है नहीं एक वास्तविक सूचक मूल्य। जेवीएम द्वारा वस्तुओं के मेमोरी एड्रेस को बदला जा सकता है जबकि उनकी पहचान हैश रख रही है। इसके अलावा, दो जीवित वस्तुओं की पहचान समान हैश हो सकती है।

आप भी उपयोग कर सकते हैं object.hashCode(), लेकिन यह विशिष्ट प्रकार का हो सकता है।

परिदृश्य 5: अद्वितीय सूचकांक

ऐसे ही मामलों में आपको प्रत्येक ऑब्जेक्ट के लिए एक अद्वितीय सूचकांक की आवश्यकता होती है, जैसे डेटाबेस तालिका में (और पहचान हैश के विपरीत) जो किसी तालिका में (पहचान के विपरीत नहीं है) स्वतः बढ़े हुए आईडी मान। इसके लिए एक सरल नमूना कार्यान्वयन:

class ObjectIndexer {

    private int index = 0;

    private Map<Object, Integer> map = new WeakHashMap<>();

    public int indexFor(Object object) {
        if (map.containsKey(object)) {
            return map.get(object);
        } else {
            index++;
            map.put(object, index);
            return index;
        }
    }

}

उपयोग:

ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject);    // 1
int y = indexer.indexFor(new Object());  // 2
int z = indexer.indexFor(yourObject);    // 1

परिदृश्य 6: एनम सदस्य

जावा एनम में सदस्य पूर्णांक नहीं हैं, लेकिन पूर्ण विशेषताओं (उदाहरण के लिए C / C ++ के विपरीत) हैं। संभवतः एक एनम ऑब्जेक्ट को कभी भी कन्वर्ट करने की आवश्यकता नहीं है int, हालांकि जावा स्वचालित रूप से प्रत्येक एनुम सदस्य को एक इंडेक्स नंबर जोड़ता है। इस सूचकांक के माध्यम से पहुँचा जा सकता है Enum.ordinal(), उदाहरण के लिए:

enum Foo { BAR, BAZ, QUX }

// ...

Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1

यहां छवि विवरण दर्ज करें


13
@Deprecated
public static int toInt(Object obj)
{
    if (obj instanceof String)
    {
         return Integer.parseInt((String) obj);
    } else if (obj instanceof Number)
    {
         return ((Number) obj).intValue();
    } else
    {
         String toString = obj.toString();
         if (toString.matches("-?\d+"))
         {
              return Integer.parseInt(toString);
         }
         throw new IllegalArgumentException("This Object doesn't represent an int");
    }
}

जैसा कि आप देख सकते हैं, यह करने का एक बहुत ही कुशल तरीका नहीं है। आपको बस यह सुनिश्चित करना है कि आपके पास किस तरह की वस्तु है। फिर इसे सही तरीके से एक इंट में बदल दें।


क्या यह @Deprecated नहीं है (एक के बजाय ई)? :) अच्छा तरीका हालांकि, वस्तु के प्रकार पर कोई धारणा नहीं बनाता है।
एक्सट्रानोन

वैसे, आपका रेगेक्स रेडिक्स हेक्स या ऑक्ट को ध्यान में नहीं रखता है। ToInt एक स्मार्ट तरीका है। NumberFormatExcepytion को पकड़ने और आज़माने के लिए बेहतर है।
एक्सट्रांसन

4

आपको इसे एक इंटेगर (इंट के रैपर क्लास) में डालना होगा। तब आप आंतरिक परिचय प्राप्त करने के लिए Integer's intValue () विधि का उपयोग कर सकते हैं।


4

उत्तर:

int i = ( Integer ) yourObject;

यदि, आपकी वस्तु पहले से ही पूर्णांक है, तो यह सुचारू रूप से चलेगा। अर्थात:

Object yourObject = 1;
//  cast here

या

Object yourObject = new Integer(1);
//  cast here

आदि।

यदि आपकी वस्तु कुछ और है, तो आपको इसे (यदि संभव हो) पहले int में बदलना होगा:

String s = "1";
Object yourObject = Integer.parseInt(s);
//  cast here

या

String s = "1";
Object yourObject = Integer.valueOf( s );
//  cast here

4

GSON से डेटा संसाधित करते समय मैं एक-लाइनर का उपयोग करता हूं:

int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;

इसकी एक लंबी प्रक्रिया है। Double.valueOf (object.toString ()) के बजाय बस (int) ऑब्जेक्ट करें । intValue () । यह केवल संख्याओं के लिए काम करता है, जो हमें चाहिए था।
सुधाकर कृष्णन

1
@SudhakarK: (int) ऑब्जेक्ट केवल तभी काम करता है जब आपकी वस्तु एक पूर्णांक है। यह ऑनलाइनर स्ट्रिंग नंबरों का भी समर्थन करता है; ईजी "332"।
जैकब वैन लिंगेन

2

यदि Objectमूल रूप से एक के रूप में तत्काल किया गया था Integer, तो आप इसे intकास्ट ऑपरेटर का उपयोग करके डाउनकास्ट कर सकते हैं (Subtype)

Object object = new Integer(10);
int i = (Integer) object;

नोट यह केवल काम करता है जब आप के साथ कम से कम जावा 1.5 का उपयोग कर रहे है कि सुविधा autoboxing , अन्यथा आप घोषित करने के लिए है iके रूप में Integerके बजाय और फिर फोन intValue()उस पर

लेकिन अगर यह शुरुआत में बिल्कुल नहीं बनाया गया था Integer, तो आप इस तरह से डाउनकास्ट नहीं कर सकते। यह ClassCastExceptionसंदेश में मूल classname के साथ परिणाम देगा । यदि ऑब्जेक्ट का toString()प्रतिनिधित्व जैसा String#valueOf()कि एक वाक्यात्मक रूप से मान्य पूर्णांक संख्या को दर्शाता है (उदाहरण के लिए अंक, यदि आवश्यक हो तो सामने एक ऋण चिह्न के साथ), तो आप इसका उपयोग कर सकते हैं Integer#valueOf()या इसके new Integer()लिए।

Object object = "10";
int i = Integer.valueOf(String.valueOf(object));

यह सभी देखें:



2

नहीं किया जा सकता। एक intवस्तु नहीं है, यह एक आदिम प्रकार है। आप इसे इंटेगर में डाल सकते हैं, फिर इंट प्राप्त कर सकते हैं।

 Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class

 int num = i; //Java 1.5 or higher

यह मानता है कि ऑब्जेक्ट एक पूर्णांक है जो यह लगभग निश्चित रूप से नहीं है। शायद चाहते हैं कि स्ट्रिंग समाधान ala Coronauts
Bill K

जब आप किसी ऑब्जेक्ट को ऑब्जेक्ट में डाल रहे हैं तब उसे कैसे संकलित किया जा सकता है और फिर इसे एक इंटीग्रेटर वैरिएबल में सेट करने की कोशिश की जा रही है।
कार्लोस

2

आप नहीं कर सकते। एक intनहीं है Object

Integerएक है Object, हालांकि, लेकिन मुझे शक है कि तुम क्या मतलब है।


जावा 5. के बाद से ऑटो बॉक्सिंग / अनबॉक्सिंग है
ब्रूको

@ ब्रूनो: आप किसी ऑब्जेक्ट को इंट में नहीं डाल सकते। आप एक ऑब्जेक्ट को एक पूर्णांक में डाल सकते हैं और फिर इसे एक इंट को असाइन कर सकते हैं और यह जादुई रूप से ऑटॉन्बॉक्स होगा। लेकिन आप किसी ऑब्जेक्ट को इंट में नहीं डाल सकते हैं।
जे '

(जारी) व्यक्तिगत रूप से, मुझे लगता है कि लोग ऑटोबॉक्सिंग पर भरोसा करने वाले बहुत से बुरे कोड बनाते हैं। जैसे, मैंने दूसरे दिन एक बयान देखा, "डबल राशि = (Double.parseDouble (stringAmount))। doubleValue ();"। यही है, उन्होंने एक स्ट्रिंग प्राप्त करने के लिए एक डबल आदिम प्राप्त किया, फिर इस के खिलाफ एक फ़ंक्शन निष्पादित किया, जिसने कंपाइलर को एक डबल ऑब्जेक्ट में ऑटोबॉक्स करने के लिए मजबूर किया, लेकिन फ़ंक्शन डबलवैल्यू था जिसने डबल आदिम को निकाला, जिसे उन्होंने फिर एक डबल को सौंपा। ऑब्जेक्ट इस प्रकार एक ऑटोबॉक्स मजबूर करता है। अर्थात्, वह आदिम से वस्तु में आदिम से वस्तु में परिवर्तित हो गया, 3 रूपांतरण।
जे।

@ जय, पहली टिप्पणी पर सहमत हुए (क्षमा करें, मैं खुद स्पष्ट नहीं था)। बहुत अधिक रूपांतरण के बारे में, आप सही कह रहे हैं, लेकिन मुझे यह आभास मिलता है कि जेआईटी कंपाइलर काफी अच्छी तरह से सामना कर सकता है, इसलिए यह बहुत ज्यादा व्यवहार में नहीं होना चाहिए (यह जरूरी नहीं कि यह खराब कोड का बहाना है। ...)
ब्रूनो

1
@Bruno ऑटोबॉक्सिंग के ट्रिपिपार्ट में यह है कि यह आपको अप्रत्याशित NullPointerException दे सकता है।
extraneon

1

यदि आप का मतलब है इंट करने के लिए एक स्ट्रिंग डाली, का उपयोग करें Integer.valueOf("123")

आप अधिकांश अन्य वस्तुओं को हालांकि इंट करने के लिए नहीं डाल सकते हैं, क्योंकि उनका अभिन्न मूल्य नहीं है। जैसे एक XmlDocument का कोई इंट वैल्यू नहीं है।


1
Integer.valueOf("123")यदि आपकी ज़रूरत है तो इसका उपयोग न करें Integer.parseInt("123")क्योंकि इसके बजाय एक आदिम है क्योंकि valueOf विधि एक अनावश्यक अनबॉक्सिंग का कारण बनती है।
केरेम बद्दोआन

1

मुझे लगता है कि आप सोच रहे हैं कि C या C ++ आपको एक नंबर की तरह ऑब्जेक्ट पॉइंटर को हेरफेर करने की अनुमति क्यों देता है, लेकिन आप जावा में ऑब्जेक्ट रेफरेंस को उसी तरह से हेरफेर नहीं कर सकते।

जावा में ऑब्जेक्ट संदर्भ सी या सी ++ में पॉइंटर्स की तरह नहीं हैं ... पॉइंटर्स मूल रूप से पूर्णांक हैं और आप उन्हें किसी अन्य इंट की तरह जोड़ तोड़ कर सकते हैं। संदर्भ जानबूझकर एक अधिक ठोस अमूर्तता है और जिस तरह से संकेत कर सकते हैं उस तरह से हेरफेर नहीं किया जा सकता है।


1
int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
    ArrayList list = null;
    Statement statement = conn.createStatement();
    ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "='" + value + "'");
    while (result.next()) {
        list.add(result.getInt(1));
    }
    statement.close();
    int id[] = new int[list.size()];
    for (int i = 0; i < id.length; i++) {
        try {
            id[i] = ((Integer) list.get(i)).intValue();
        } catch(NullPointerException ne) {
        } catch(ClassCastException ch) {}
    }
    return id;
}
// enter code here

यह कोड दिखाता है कि क्यों ArrayListमहत्वपूर्ण है और हम इसका उपयोग क्यों करते हैं। बस कास्टिंग intसे Object। इसके मददगार हो सकते हैं।


कृपया अपना उत्तर बताएं
Gwenc37

1

उदाहरण के लिए वस्तु चर; hastaId

Object hastaId = session.getAttribute("hastaID");

उदाहरण के लिए एक वस्तु को एक इंट कास्ट करें,hastaID

int hastaID=Integer.parseInt(String.valueOf(hastaId));

0

इस कोड को देखें:

public class sample 
{
  public static void main(String[] args) 
  {
    Object obj=new Object();
    int a=10,b=0;
    obj=a;
    b=(int)obj;

    System.out.println("Object="+obj+"\nB="+b);
  }
}

0
so divide1=me.getValue()/2;

int divide1 = (Integer) me.getValue()/2;

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

0

अंत में, आपके विनिर्देशन के लिए सबसे अच्छा कार्यान्वयन मिला।

public int tellMyNumber(Object any) {
    return 42;
}

-4

पहले Instof कीवर्ड से जांचें। अगर सच है तो इसे कास्ट करें।


मैंने इसका इस्तेमाल किया और अब सोच रहा था कि उस बॉक्स पर 'बॉक्सेड वैल्यू को अनबॉक्स्ड तो इम्पीडेलीली रीबॉक्स्ड' कैसे हल किया जाए। (स्पॉटबग्स चेक के कारण) तो अब मैं सोच रहा हूं कि इसे बेहतर तरीके से कैसे हल किया जाए।
जैस्पर लंकोरहस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.