जवाबों:
Integer i = theLong != null ? theLong.intValue() : null;
या यदि आपको अशक्त होने की आवश्यकता नहीं है:
// auto-unboxing does not go from Long to int directly, so
Integer i = (int) (long) theLong;
और दोनों स्थितियों में, आप ओवरफ्लो में भाग सकते हैं (क्योंकि एक लॉन्ग एक इंटीजर की तुलना में एक व्यापक रेंज को स्टोर कर सकता है)।
जावा 8 में एक सहायक विधि है जो अतिप्रवाह की जांच करती है (आपको उस मामले में अपवाद मिलता है):
Integer i = theLong == null ? null : Math.toIntExact(theLong);
intValueडालेंगे? इसके अलावा, यह लंबे समय तक अनबॉक्स करने जा रहा है, इंट टू कास्ट और रीबॉक्स टू Integer, जो बहुत उपयोगी नहीं लगता है। मैं अपने सिर के ऊपर बिंदु नहीं देखता, क्या आपके पास इसके लिए एक अच्छा कारण है?
Longकरने के लिए longपहले, और फिर करने के लिएint
इसे करने के तीन तरीके हैं:
Long l = 123L;
Integer correctButComplicated = Integer.valueOf(l.intValue());
Integer withBoxing = l.intValue();
Integer terrible = (int) (long) l;
सभी तीन संस्करण लगभग समान बाइट कोड उत्पन्न करते हैं:
0 ldc2_w <Long 123> [17]
3 invokestatic java.lang.Long.valueOf(long) : java.lang.Long [19]
6 astore_1 [l]
// first
7 aload_1 [l]
8 invokevirtual java.lang.Long.intValue() : int [25]
11 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
14 astore_2 [correctButComplicated]
// second
15 aload_1 [l]
16 invokevirtual java.lang.Long.intValue() : int [25]
19 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
22 astore_3 [withBoxing]
// third
23 aload_1 [l]
// here's the difference:
24 invokevirtual java.lang.Long.longValue() : long [34]
27 l2i
28 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
31 astore 4 [terrible]
123Lपठनीयता के लिए ऊपरी-केस प्रत्यय का उपयोग करना चाहिए ।
गैर-शून्य मानों के लिए:
Integer intValue = myLong.intValue();
यदि आप ओवरफ्लो की जांच करना चाहते हैं और अमरूद का उपयोग करना चाहते हैं , तो यह है Ints.checkedCast():
int theInt = Ints.checkedCast(theLong);
कार्यान्वयन मृत सरल है, और ओवरफ़्लो पर IllegalArgumentException को फेंकता है :
public static int checkedCast(long value) {
int result = (int) value;
checkArgument(result == value, "Out of range: %s", value);
return result;
}
आपको इसे टाइप करना होगा।
long i = 100L;
int k = (int) i;
ध्यान रखें कि एक इंट की तुलना में एक बड़ी रेंज है ताकि आप डेटा खो सकते हैं।
यदि आप बॉक्सिंग प्रकारों के बारे में बात कर रहे हैं, तो दस्तावेज़ीकरण पढ़ें ।
यदि आप जावा 8 का उपयोग कर रहे हैं तो इसे नीचे बताएं
import static java.lang.Math.toIntExact;
public class DateFormatSampleCode {
public static void main(String[] args) {
long longValue = 1223321L;
int longTointValue = toIntExact(longValue);
System.out.println(longTointValue);
}
}
ऐसा करने का सबसे सरल तरीका है:
public static int safeLongToInt( long longNumber )
{
if ( longNumber < Integer.MIN_VALUE || longNumber > Integer.MAX_VALUE )
{
throw new IllegalArgumentException( longNumber + " cannot be cast to int without changing its value." );
}
return (int) longNumber;
}
Java 8 में आप उपयोग कर सकते हैं toIntExact। यदि आप nullमानों को संभालना चाहते हैं, तो उपयोग करें:
Integer intVal = longVal == null ? null : Math.toIntExact(longVal);
इस विधि के बारे में अच्छी बात यह है कि यह एक ArithmeticExceptionतर्क को फेंकता है ( long) ओवरफ्लो करता है int।
यह मानते हुए कि अशक्त longVal नहीं है
Integer intVal = ((Number)longVal).intValue();
यह उदाहरण के लिए काम करता है y आपको एक ऑब्जेक्ट मिलता है जो एक इंटेगर या लॉन्ग हो सकता है। मुझे पता है कि बदसूरत है, लेकिन ऐसा होता है ...
यदि toIntExact (long value) का उपयोग करना लंबे तर्क का मान लौटाता है, तो एक अपवाद को फेंक दिया जाता है यदि मान एक intfl को ओवरफ्लो करता है। यह केवल एपीआई स्तर 24 या इसके बाद के संस्करण पर काम करेगा।
int id = Math.toIntExact(longId);
जावा में, लंबे समय को अंतर में बदलने का एक कठोर तरीका है
न केवल lnog इंट में परिवर्तित हो सकता है, किसी भी प्रकार की क्लास फैली हुई संख्या सामान्य रूप से अन्य नंबर प्रकार में परिवर्तित हो सकती है, यहां मैं आपको दिखाऊंगा कि लंबे समय को इंट, अन्य प्रकार के विपरीत में कैसे परिवर्तित किया जाए।
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);