कभी-कभी मुझे एपीआई का उपयोग long
या दिखाई देता हैLong
या int
या Integer
, और मैं नहीं कर सकता आंकड़ा कैसे निर्णय है कि के लिए किया जाता है?
मुझे कब चुनना चाहिए?
कभी-कभी मुझे एपीआई का उपयोग long
या दिखाई देता हैLong
या int
या Integer
, और मैं नहीं कर सकता आंकड़ा कैसे निर्णय है कि के लिए किया जाता है?
मुझे कब चुनना चाहिए?
जवाबों:
Long
है Object
के रूप long
, और Integer
की वस्तु रूप है int
।
64 बिट का long
उपयोग करता है । 32 बिट्स का उपयोग करता है, और इसलिए केवल -2 2 बिलियन (-2 31 से +2 31 -1) तक की संख्या पकड़ सकता है ।int
आपको उपयोग करना चाहिए long
और int
, सिवाय इसके कि आपको विरासत में मिली विधियों का उपयोग करने की आवश्यकता है Object
, जैसे कि hashcode
। Java.util.collections
विधियाँ आमतौर पर बॉक्सिंग ( Object
-वार्डेड) संस्करणों का उपयोग करती हैं , क्योंकि उन्हें किसी भी काम करने की आवश्यकता होती है Object
, और एक आदिम प्रकार, जैसे int
या long
, एक नहीं है Object
।
एक और अंतर यह है कि है long
और int
कर रहे हैं पास-दर-मूल्य , जबकि Long
और Integer
कर रहे हैं पास-दर-संदर्भ मूल्य , सभी गैर आदिम जावा प्रकार की तरह। इसलिए यदि यह संभव हो तो संशोधित किया जा सकता हैLong
या Integer
(यह नहीं है, तो वे जेएनआई कोड का उपयोग किए बिना अपरिवर्तनीय हैं), दूसरे पर एक का उपयोग करने का एक और कारण होगा।
एक अंतिम अंतर यह है कि एक Long
या Integer
हो सकता है null
।
कुछ चीजें हैं जो आप एक आदिम प्रकार के साथ नहीं कर सकते हैं:
null
मूल्य हैObject
s के साथ काम करता हैजब तक आपको उनमें से किसी की आवश्यकता नहीं होती है, तो आपको आदिम प्रकारों को प्राथमिकता देना चाहिए, क्योंकि उन्हें कम स्मृति की आवश्यकता होती है।
int
संख्याओं को रखते समय डिफ़ॉल्ट रूप से a का उपयोग करें ।int
बहुत छोटी है, तो उपयोग करेंlong
long
बहुत छोटी है, तो उपयोग करेंBigInteger
Collection
, हैंडलिंग null
, ...) उपयोग में लाना Integer
/ Long
इसके बजायएक int
32-बिट पूर्णांक है; a long
64-बिट पूर्णांक है। कौन सा उपयोग करना है यह इस बात पर निर्भर करता है कि आप कितनी बड़ी संख्या के साथ काम करने की उम्मीद करते हैं।
int
और long
आदिम प्रकार हैं, जबकि Integer
और Long
वस्तुएं हैं। आदिम प्रकार अधिक कुशल हैं, लेकिन कभी-कभी आपको वस्तुओं का उपयोग करने की आवश्यकता होती है; उदाहरण के लिए, जावा के संग्रह कक्षाएं केवल वस्तुओं के साथ काम कर सकते हैं, इसलिए यदि आप पूर्णांकों की एक सूची की जरूरत है आप इसे एक बनाने के लिए है List<Integer>
, उदाहरण के लिए (यदि आप उपयोग नहीं कर सकते int
एक में List
सीधे)।
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
यदि आपकी चर का उपयोग 32 बिट श्रेणी में होता है, तो उपयोग करें Int
, और उपयोग करें long
। आमतौर पर लंबे समय का उपयोग वैज्ञानिक संगणना और सामान के लिए किया जाता है, जिसमें बहुत सटीकता की आवश्यकता होती है। (उदा। पाई का मान)।
एक के बाद एक को चुनने का एक उदाहरण YouTube का मामला है। उन्होंने पहली बार वीडियो व्यू काउंटर को परिभाषित
int
किया था , जो 2,147,483,647 से अधिक बार देखा गया था, जहां एक लोकप्रिय वीडियो प्राप्त हुआ था। चूंकि एकInt
काउंटर अपनी सीमा से अधिक किसी भी मूल्य को संग्रहीत नहीं कर सकता है, YouTube ने काउंटर को 64 बिट चर में बदल दिया है और अब 9,223,372,036,854,775,807 बार देखा जा सकता है। अपने डेटा को समझें और उस प्रकार का चयन करें जो 64 बिट चर के रूप में फिट बैठता है, 32 बिट चर की तुलना में मेमोरी को दोगुना लेगा।
जब यह एक बहुत लंबी संख्या का उपयोग करने की बात आती है जो प्रतिनिधित्व करने के लिए 32 बिट्स से अधिक हो सकती है, तो आप यह सुनिश्चित करने के लिए लंबे समय का उपयोग कर सकते हैं कि आपके पास अजीब व्यवहार नहीं होगा।
Java 5 से आप इन-बॉक्सिंग और आउट-बॉक्सिंग सुविधाओं का उपयोग कर सकते हैं ताकि इंट और इंटेगर का उपयोग पूरी तरह से समान हो सके। इसका मतलब है कि आप कर सकते हैं:
int myInt = new Integer(11);
Integer myInt2 = myInt;
अंदर और बाहर मुक्केबाजी (के लिए एक ही आप किसी भी अतिरिक्त रूपांतरण के बिना पूर्णांक और पूर्णांक बीच स्विच कर सकते Long
, Double
, Short
भी)
आप int
हर समय उपयोग कर सकते हैं , लेकिन Integer
कुछ सहायक विधियाँ हैं जो पूर्णांक के साथ कुछ जटिल कार्य करने में आपकी सहायता कर सकती हैं (जैसे Integer.parseInt(String)
)
ए) ऑब्जेक्ट क्लास "लॉन्ग" बनाम आदिम प्रकार "लॉन्ग"। (कम से कम जावा में)
बी) आदिम प्रकारों की अलग-अलग (यहां तक कि अस्पष्ट) मेमोरी-आकार हैं:
जावा - सभी स्पष्ट: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datitypes.html
C .. बस गड़बड़: https://en.wikipedia.org/wiki/C_data_types