2009-08-19 15 views
167

मैं यहां दोनों को ढूंढ रहा हूं और Google लोगों को long से int से परेशानी हो रही है और दूसरी तरफ नहीं। फिर भी मुझे यकीन है कि मैं अकेला नहीं हूं जो इस परिदृश्य में int से Long पर जाने से पहले चला गया है।मैं जावा में 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); 
} 

आप कल्पना कर सकते हैं मैं एक छोटे से उलझन में हूँ, मैं पूर्णांक के बाद से कुछ सामग्री एक ArrayList और इकाई के रूप में में आ रहा है का उपयोग कर अटक कर रहा हूँ जिसके लिए मैं इस जानकारी को संग्रहीत करने के लिए अनुक्रम संख्या को लंबे समय तक आवश्यक है।

धन्यवाद!

+0

(लंबी मैं = 0; i Instantsoup

+0

@Instantsoup हाँ कि पाश के लिए काम करेंगे, लेकिन मैं के निचले भाग में निर्दिष्ट के रूप में मेरे जब मैं इंडेक्स स्थिति – Ghosty

+0

लंबे समय तक प्राप्त करने के लिए निर्दिष्ट करता हूं, तो निर्दिष्ट करने वाले एरेलेलिस्ट के साथ काम करने के लिए आदिम int की आवश्यकता होती है Value = intValue | 0L; –

उत्तर

203

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

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

+21

यह दिखाने के लिए कि ईरविकियर ने क्या कहा था कि आप Long.valueOf (i) को कॉल कर सकते हैं, जो एक लंबा समय लेता है लेकिन एक int को विस्तृत करेगा और आपको एक लंबी वस्तु वापस देगा। – Grundlefleck

+0

ऑटोबॉक्सिंग बेहतर है, क्योंकि इसे हर बार एक नया 'लांग' ऑब्जेक्ट बनाना जरूरी नहीं है। –

+1

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

150

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

+1

क्या ऐसी कोई विधि है? –

+17

Long.valueOf (लंबा) है जो int के लिए भी काम करता है। – serg

+3

देखें, क्योंकि यह एक NullPointerException उत्पन्न करेगा यदि आप एक इंटेगर ऑब्जेक्ट प्राप्त कर रहे हैं जो शून्य है। – will824

13

आप पहले से ही पूर्णांक एक पूर्णांक आप यह कर सकते हैं के रूप में आपके द्वारा लिखा गया है:

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

मैं इस के साथ परेशानी का एक बड़ा सौदा किया था। मैं बस चाहता था:

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; 
} 

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

+0

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

5

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

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

जावा में आप कर सकते हैं के साथ ठीक कर रहा हूँ:

int myInt=4; 
Long myLong= new Long(myInt); 

आपके मामले में यह होगा:

content.setSequence(new Long(i)); 
2

हमें 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 

} 
8

उपयोग

new Long(your_integer); 

या

Long.valueOf(your_integer); 
2

कैसे बारे में

int myInt = 88; 

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

Long myLong = myInt; 

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

long myLong = myInt; 

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

Long myLong = (long) myInt; 
1
//Suppose you have int and you wan to convert it to Long 
int i=78; 
//convert to Long 
Long l=Long.valueOf(i) 
के लिए
संबंधित मुद्दे