मैं जावा में इंट से लॉन्ग में कैसे परिवर्तित करूं?


219

मैं यहां और Google लोगों दोनों को ढूंढता रहता हूं, जिससे आने-जाने में परेशानी होती longहै intऔर दूसरे तरीके से नहीं। फिर भी मुझे यकीन है कि मैं केवल एक है कि से जाने से पहले इस परिदृश्य में समाप्त हो गया है नहीं कर रहा हूँ कर रहा हूँ intकरने के लिए Long

केवल दूसरे उत्तर जो मुझे मिले हैं, "बस इसे पहले स्थान पर लंबे समय तक सेट करें" जो वास्तव में प्रश्न को संबोधित नहीं करता है।

मैंने शुरुआत में कास्टिंग की कोशिश की थी लेकिन मुझे " Cannot cast from int to Long"

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

जैसा कि आप कल्पना कर सकते हैं कि मैं थोड़ा हैरान हूं, intक्योंकि मैं कुछ सामग्री के रूप में उपयोग कर रहा हूं ArrayListऔर एक इकाई के रूप में आ रहा हूं, जिसके लिए मैं इस जानकारी को संग्रहीत कर रहा हूं, क्रम संख्या की आवश्यकता है।


for (long i = 0; मैं <myList.size (); ++ i) भी काम करता है
Instantsoup

@Instantsoup हां जो लूप के लिए काम करेगा, लेकिन जैसा कि मैंने अपने प्रश्न के निचले भाग में निर्दिष्ट किया है कि मैं जिस ArrayList के साथ काम कर रहा हूं उसे आदिम इंट की आवश्यकता होती है जब निर्दिष्ट करता है कि सूचकांक की स्थिति क्या है
Ghosty

long longValue = intValue | 0L;
डैनियल जिपा

मैंने जो किया है: पहले कास्ट intकिया long, फिर असाइन longकिया Long। जैसेint x = 2; Long y = (long)x;
एरिक वांग

जवाबों:


244

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

आप वैकल्पिक रूप से इसका newउदाहरण बनाने के लिए उपयोग कर सकते हैं Long, इसे intमूल्य के साथ आरंभ कर सकते हैं ।


31
यह दर्शाने के लिए कि ईयरविकेर ने क्या कहा था आप लॉन्ग.वेल्यूऑफ (i) को कॉल कर सकते हैं, जिसमें एक लंबा समय लगता है, लेकिन यह एक इंट को चौड़ा करेगा और आपको एक लॉन्ग ऑब्जेक्ट वापस देगा।
ग्रुंडलेफ़्लेक

1
ऑटोबॉक्सिंग बेहतर है, क्योंकि यह जरूरी नहीं कि Longहर बार एक नई वस्तु बनाई जाए ।
माइकल मायर्स

2
(चेतावनी: इस टिप्पणी के बाकी अनुमान और अनुमान है) यदि Long.valueOf () और 0 के बीच दिए गए मान 0 और 128 के बीच हैं, जो बहुत आम है, और यह एक कैश्ड उदाहरण देता है, तो क्या यह ऑटोबॉयलिंग पर बेहतर होगा? (मैं एक नया सवाल पूछ सकता हूं अगर आपको लगता है कि यह इसके लायक है ...)
ग्रांडफ्लेक

4
ऑटोबॉक्सिंग उसी तरह से करता है। वैसे, यह -127 और 128 के बीच है।
डैनियल ईयरविकर

6
@Grundlefleck: ऑटोबॉक्सिंग का उपयोग करता है Long.valueOf()(अगर मुझे सही याद है), तो बिल्कुल भी अंतर नहीं होगा। मेरी टिप्पणी जवाब के जवाब में थी, आपकी टिप्पणी के लिए नहीं।
माइकल मायर्स

194

निम्नलिखित का उपयोग करें: Long.valueOf(int);


5
बाहर देखो, क्योंकि यह एक NullPointerException उत्पन्न करेगा यदि आप एक पूर्णांक वस्तु प्राप्त कर रहे हैं जो अशक्त है।
2124 में 824

2
सही है अगर मैं सोच रहा हूँ कि उत्तर हो सकता है पुराना हो गया है क्योंकि मैं विधि नहीं ढूँढ सकता हूँLong.valueOf(int) !!
shareef

5
@ will824 - एक आदिम 'int' चर शून्य नहीं हो सकता।
रोंडो

1
@shareef - serg की टिप्पणी को देखने - लेकिन मैं इस विधि एक लंबे जो एक लंबे साथ autoboxes को पूर्णांक डाले लगता है ... इसलिए अनावश्यक प्रतीत
रोण्डो

1
@ रोंडो एक कैन Integer, जो उसने कहा है।
मोइरा

17

यदि आपके पास पहले से ही इंटिजर के रूप में टाइप किया गया है तो आप ऐसा कर सकते हैं:

Integer y = 1;
long x = y.longValue();


6

मेरे पास यह छोटा खिलौना है, जो गैर जेनेरिक इंटरफेस के साथ भी काम करता है। अगर यह गलत है (ठीक है और खुश है)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}


6

कैसा रहेगा

int myInt = 88;

// संकलन नहीं होगा

Long myLong = myInt;

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

long myLong = myInt;

// संकलन, सबसे कुशल तरीका है, और यह स्पष्ट करता है कि स्रोत मूल्य, कभी भी NULL नहीं होगा।

Long myLong = (long) myInt;

3

हमें Numberसंदर्भ का उपयोग करके लंबा मूल्य मिलेगा ।

public static long toLong(Number number){
    return number.longValue();
}

यह सभी प्रकारों के लिए काम करता है, यहाँ एक परीक्षण है:

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}


2

मुझे इससे बहुत परेशानी हुई। मुझे बस चाहिये:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

जहां इंटरवलाउंट एक लॉन्ग है, और जेस्पिनर को लॉन्ग लौटने के लिए सेट किया गया था। आखिरकार मुझे यह समारोह लिखना पड़ा:

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

जो चाल करने के लिए लगता है। सरल कास्टिंग की कोई राशि, उपरोक्त समाधानों में से किसी ने भी मेरे लिए काम नहीं किया। अधिक निराश।


1
यदि jPaidCountSpinner.getValue()वास्तव में कोई वस्तु वापस मिलती है Long, तो आपको निश्चित रूप से केवल एक (Long)डाली सामने रखनी होगी। इसके लिए अपने चेक पर ब्रेकपॉइंट लगाने की कोशिश करें int.classया फिर long.classक्या यह कभी हिट होता है? और यदि आपके पास एक नंबर जैसी वस्तु है, तो यह समर्थन करेगा java.util.Number, इसलिए इसे उसी पर डालें और longValueविधि को कॉल करें । उस मामले में एक स्ट्रिंग के माध्यम से जाने की आवश्यकता नहीं है। इसलिए इस फ़ंक्शन को थोड़ा सरल किया जा सकता है, भले ही आपको स्ट्रिंग्स से निपटने की आवश्यकता हो। (यहां समस्या का एक हिस्सा खराब संदर्भ प्रलेखन है JSpinner)।
डैनियल ईयरविकर

1
मैं भी कुछ इस तरह से करने के लिए समाप्त हो गया। मुझे यकीन नहीं था कि मुझे किस प्रकार की संख्या प्राप्त होगी और इसे दक्षता के लिए थोड़ी चिंता के साथ लॉन्ग में बदलने के लिए तैयार था लेकिन बॉयलरप्लेट से बचना चाहता था।
Profiterole


0

जैसे ही वहाँ केवल विधि है के रूप में Long.valueOf(long), से कलाकारों intके लिए longइस्तेमाल करने के मामले में परोक्ष किया जाएगा Long.valueOf(intValue)

ऐसा करने का अधिक स्पष्ट तरीका है

Integer.valueOf(intValue).longValue()

longValueसिर्फ एक है (long), इसलिए केवल एक चीज जो आपको "हासिल" है वह है Integerआंतरिक कैश।
मार्टिन श्रोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.