लॉन्ग बनाम इंटेगर, लॉन्ग बनाम इंट, क्या उपयोग करें और कब करें?


135

कभी-कभी मुझे एपीआई का उपयोग longया दिखाई देता हैLong या intया Integer, और मैं नहीं कर सकता आंकड़ा कैसे निर्णय है कि के लिए किया जाता है?

मुझे कब चुनना चाहिए?

जवाबों:


191

Longहै Objectके रूप long, और Integerकी वस्तु रूप है int

64 बिट का longउपयोग करता है । 32 बिट्स का उपयोग करता है, और इसलिए केवल -2 2 बिलियन (-2 31 से +2 31 -1) तक की संख्या पकड़ सकता है ।int

आपको उपयोग करना चाहिए longऔर int, सिवाय इसके कि आपको विरासत में मिली विधियों का उपयोग करने की आवश्यकता है Object, जैसे कि hashcodeJava.util.collectionsविधियाँ आमतौर पर बॉक्सिंग ( Object-वार्डेड) संस्करणों का उपयोग करती हैं , क्योंकि उन्हें किसी भी काम करने की आवश्यकता होती है Object, और एक आदिम प्रकार, जैसे intया long, एक नहीं है Object

एक और अंतर यह है कि है longऔर intकर रहे हैं पास-दर-मूल्य , जबकि Longऔर Integerकर रहे हैं पास-दर-संदर्भ मूल्य , सभी गैर आदिम जावा प्रकार की तरह। इसलिए यदि यह संभव हो तो संशोधित किया जा सकता हैLong या Integer(यह नहीं है, तो वे जेएनआई कोड का उपयोग किए बिना अपरिवर्तनीय हैं), दूसरे पर एक का उपयोग करने का एक और कारण होगा।

एक अंतिम अंतर यह है कि एक Longया Integerहो सकता है null


5
@ बोरेलिड, यह इतना गलत है, जावा हमेशा मूल्य से गुजरता है, जावा में संदर्भ के रूप में पास के रूप में ऐसा कुछ भी नहीं है।
डिएगो रामोस

9
अहां? ठीक है, आइए इस विचार का अन्वेषण करें कि जावा कभी संदर्भ नहीं देता है। यदि मैं किसी फ़ंक्शन को int [2] देता हूं, और फिर फ़ंक्शन के अंदर मैं उस एरे के पहले तत्व में रखे मूल्य को बदल देता हूं, तो क्या फ़ंक्शन के कॉलर को वह परिवर्तन दिखाई देगा? हाँ? खैर ऐसा इसलिए है क्योंकि समारोह में जो पारित किया गया था वह सरणी में मान नहीं था, बल्कि उन मूल्यों का संदर्भ था। "पास बाय वैल्यू" का अर्थ है कि वास्तविक डेटा को स्वयं अप्रत्यक्ष रूप से चारों ओर से कॉपी किया जा रहा है। जिसे आपने सिखाया कि जावा पास-बाय-वैल्यू था, आपने एक असहमति का काम किया।
बोरेलिड

3
@ गलत आप गलत हैं, मान बदल गया है क्योंकि सरणी के संदर्भ की एक नई प्रतिलिपि बनाई गई थी, यही कारण है कि जो भी फ़ंक्शन को कॉल कर रहा है वह परिवर्तन को देखेगा, यह अभी भी मूल्य से पास है। मुझे विश्वास नहीं हो रहा है कि आप कह सकते हैं कि जावा में संदर्भ के द्वारा पास है आप फ़ंक्शन के मूल संदर्भ को कभी पास नहीं करते हैं।
डिएगो रामोस

6
एक सैद्धांतिक दुनिया में जहां जावा वास्तव में यह कैसे करता है से पूरी तरह से अलग व्यवहार करता है, और किसी वस्तु या सरणी को किसी फ़ंक्शन में पास करने के परिणामस्वरूप पूरी तरह से अलग कॉपी होती है (जहां फ़ंक्शन के अंदर संशोधनों को कॉल करने वालों को बिल्कुल भी प्रतिबिंबित नहीं किया गया था), फिर आप कैसे करेंगे भाषा का वर्णन करें यह ध्यान में रखते हुए कि हम जिस बारे में बात कर रहे हैं वह पूरी तरह से नहीं है जो जावा वास्तव में करता है।
बोरेलिड

2
@DiegoRamos सही है। जावा हमेशा मूल्य से गुजरता है, भ्रम पैदा होता है क्योंकि जब गैर आदिम एक स्मृति संदर्भ होता है, तो स्थैतिक अदला
बदली

28

कुछ चीजें हैं जो आप एक आदिम प्रकार के साथ नहीं कर सकते हैं:

  • एक nullमूल्य है
  • उन पर सिंक्रनाइज़ करें
  • एक सामान्य वर्ग के लिए उन्हें टाइप पैरामीटर के रूप में उपयोग करें, और उससे संबंधित:
  • उन्हें एक एपीआई में पास करें जो Objects के साथ काम करता है

जब तक आपको उनमें से किसी की आवश्यकता नहीं होती है, तो आपको आदिम प्रकारों को प्राथमिकता देना चाहिए, क्योंकि उन्हें कम स्मृति की आवश्यकता होती है।


24
  • intसंख्याओं को रखते समय डिफ़ॉल्ट रूप से a का उपयोग करें ।
  • यदि सीमा intबहुत छोटी है, तो उपयोग करेंlong
  • यदि सीमा longबहुत छोटी है, तो उपयोग करेंBigInteger
  • यदि आपको अपने नंबरों को ऑब्जेक्ट के रूप में हैंडल करने की आवश्यकता है (उदाहरण के लिए जब उन्हें एक Collection, हैंडलिंग null, ...) उपयोग में लाना Integer/ Longइसके बजाय

13

एक int32-बिट पूर्णांक है; a long64-बिट पूर्णांक है। कौन सा उपयोग करना है यह इस बात पर निर्भर करता है कि आप कितनी बड़ी संख्या के साथ काम करने की उम्मीद करते हैं।

intऔर longआदिम प्रकार हैं, जबकि Integerऔर Longवस्तुएं हैं। आदिम प्रकार अधिक कुशल हैं, लेकिन कभी-कभी आपको वस्तुओं का उपयोग करने की आवश्यकता होती है; उदाहरण के लिए, जावा के संग्रह कक्षाएं केवल वस्तुओं के साथ काम कर सकते हैं, इसलिए यदि आप पूर्णांकों की एक सूची की जरूरत है आप इसे एक बनाने के लिए है List<Integer>, उदाहरण के लिए (यदि आप उपयोग नहीं कर सकते intएक में Listसीधे)।


6

पूर्णांक एक हस्ताक्षरित 32 बिट पूर्णांक प्रकार है

  • इस रूप में घोषित किया गया Int
  • आकार = 32 bits (4byte)
  • रेंज के पूर्णांक पकड़ सकते हैं -2,147,483,648 to 2,147,483,647
  • डिफ़ॉल्ट मान 0 है


लोंग एक हस्ताक्षरित 64 बिट पूर्णांक प्रकार है

  • इस रूप में घोषित किया गया Long
  • आकार = 64 bits (8byte)
  • रेंज के पूर्णांक पकड़ सकते हैं -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • डिफ़ॉल्ट मान 0L है


यदि आपकी चर का उपयोग 32 बिट श्रेणी में होता है, तो उपयोग करें Int, और उपयोग करें long। आमतौर पर लंबे समय का उपयोग वैज्ञानिक संगणना और सामान के लिए किया जाता है, जिसमें बहुत सटीकता की आवश्यकता होती है। (उदा। पाई का मान)।

एक के बाद एक को चुनने का एक उदाहरण YouTube का मामला है। उन्होंने पहली बार वीडियो व्यू काउंटर को परिभाषित intकिया था , जो 2,147,483,647 से अधिक बार देखा गया था, जहां एक लोकप्रिय वीडियो प्राप्त हुआ था। चूंकि एक Intकाउंटर अपनी सीमा से अधिक किसी भी मूल्य को संग्रहीत नहीं कर सकता है, YouTube ने काउंटर को 64 बिट चर में बदल दिया है और अब 9,223,372,036,854,775,807 बार देखा जा सकता है। अपने डेटा को समझें और उस प्रकार का चयन करें जो 64 बिट चर के रूप में फिट बैठता है, 32 बिट चर की तुलना में मेमोरी को दोगुना लेगा।


1

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

Java 5 से आप इन-बॉक्सिंग और आउट-बॉक्सिंग सुविधाओं का उपयोग कर सकते हैं ताकि इंट और इंटेगर का उपयोग पूरी तरह से समान हो सके। इसका मतलब है कि आप कर सकते हैं:

int myInt = new Integer(11);
Integer myInt2 = myInt;

अंदर और बाहर मुक्केबाजी (के लिए एक ही आप किसी भी अतिरिक्त रूपांतरण के बिना पूर्णांक और पूर्णांक बीच स्विच कर सकते Long, Double, Shortभी)

आप intहर समय उपयोग कर सकते हैं , लेकिन Integerकुछ सहायक विधियाँ हैं जो पूर्णांक के साथ कुछ जटिल कार्य करने में आपकी सहायता कर सकती हैं (जैसे Integer.parseInt(String))


0

ए) ऑब्जेक्ट क्लास "लॉन्ग" बनाम आदिम प्रकार "लॉन्ग"। (कम से कम जावा में)

बी) आदिम प्रकारों की अलग-अलग (यहां तक ​​कि अस्पष्ट) मेमोरी-आकार हैं:

जावा - सभी स्पष्ट: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datitypes.html

  • बाइट, चार .. 1 बी .. 8 बी
  • लघु int .. 2B .. 16 ब
  • int .. .. .. .. 4 बी .. 32 ब
  • लंबी int .. 8B .. 64b

C .. बस गड़बड़: https://en.wikipedia.org/wiki/C_data_types

  • छोटा .. .. 16 ब
  • int .. .. 16 बी ... wtf?!?!
  • लंबा .. .. 32 ब
  • लम्बी लम्बी .. 64b .. मेस! : - /

यह उस सवाल का जवाब नहीं देता है, जो लोंग और लॉन्ग आदि के बीच अंतर के बारे में है
ग्रीनएजजेड

नहीं, यह स्पष्ट रूप से इसका उत्तर नहीं देता है, स्पष्ट रूप से एक आदिम प्रकार बनाम डेटा प्रकार की वस्तुओं के बीच का अंतर नहीं कह रहा है, वास्तव में @GreenAsJade, क्योंकि ऊपर दिए गए प्रश्न में कोई विशिष्ट भाषा नहीं है। इसलिए मैंने एक तुलना प्रदान की है - इसलिए हर कोई अंतर की जांच कर सकता है। (कठिन आंकड़ों से, जैसा कि प्रदान किया गया है)
फ्रांता

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