java - How does the toString(), ==, equals() object methods work differently or similarly on reference and primitive types? -


कैसे toString () विधि, == ऑपरेटर कैसे करता है, और बराबर () विधि अलग तरह से या इसी तरह संदर्भ और आदिम प्रकार पर

<पी > नियमित प्रकार के लिए (स्ट्रिंग सहित):

  • == वस्तु संदर्भों की तुलना करता है। यह परीक्षण करता है कि दो वस्तु संदर्भ समान हैं; अर्थात यदि वे समान ऑब्जेक्ट को देखें।
  • बराबर (ऑब्जेक्ट) परीक्षण अगर यह ऑब्जेक्ट एक दूसरे के बराबर है क्या "बराबर" मतलब इस बात पर निर्भर करता है कि वस्तु का वर्ग समानता को कैसे परिभाषित करता है java.lang.Object वर्ग परिभाषित करता है बराबर (अन्य) हो यह == अन्य , लेकिन कई वर्ग इस परिभाषा को ओवरराइड करते हैं।
  • toString () एक स्ट्रिंग के लिए वस्तु का एक सरल रूपांतरण प्रदान करता है परिणामी स्ट्रिंग का प्रारूप और सामग्री वर्ग विशिष्ट है, और ( java.lang.Object अनुबंध के परिप्रेक्ष्य से) कोई गारंटी नहीं है कि यह सार्थक होगा।
<पी> (सच्चे) आदिम प्रकार के लिए:

  • == प्रकार के मूल्य की तुलना करता है, और
  • बराबर () और toString () परिभाषित नहीं हैं जावा आपको एक प्राचीन मूल्य पर किसी विधि को कॉल करने की अनुमति नहीं देता है।

हालांकि इस तथ्य से जटिल है कि कुछ संदर्भों में जावा भाषा का कहना है कि एक आदिम आदिम प्रकार के संबंधित आवरण प्रकार का एक उदाहरण देने के लिए प्रकार "ऑटोबॉक्सेड" हो सकता है; जैसे int से संबंधित है java.lang.Integer , और इसी तरह। आवरण वर्गों के लिए:

  • == को किसी भी अन्य संदर्भ प्रकार के लिए परिभाषित किया गया है,
  • बराबर () लिपटे हुए मानों की तुलना करता है, और
  • toString () लिपटे हुए मानों को प्रारूपित करता है।

कार्यों में स्पैनर निम्नलिखित द्वारा सचित्र है:

  int a = ... int b = a; पूर्णांक आ = ए; // ऑटोबॉक्सिंग पूर्णांक बीबी = बी होता है; // ऑटोबॉक्सिंग होता है एक == बी; / / हमेशा aa.equals (बीबी) का दावा सफल होता है; // हमेशा एए == बीबी; // कभी-कभी सफल होता है, कभी-कभी विफल हो जाता है  

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

उपरोक्त उदाहरण से सीखने का सबक यह है कि आपको उपयोग करने के बारे में सावधान रहना चाहिए एक संदर्भ प्रकार पर == केवल इसका उपयोग करें जब आप वास्तव में परीक्षण करना चाहते हैं यदि दो संदर्भ एक ही ऑब्जेक्ट पर हैं इसका प्रयोग न करें यदि आप केवल परीक्षण करना चाहते हैं कि ऑब्जेक्ट "<"> कॉलिंग के ऊपरी भाग के बिना "बराबर" है। <<(यह भी ध्यान रखें कि String < / कोड> एक और प्रकार है जहां == आपको कई स्थितियों में गलत उत्तर दे रहा है, देखिए।)


Comments

Popular posts from this blog

asp.net - Javascript/DOM Why is does my form not support submit()? -

sockets - Delphi: TTcpServer, connection reset when reading -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -