assertEquals
तुलना के लिए equals
विधि का उपयोग करता है। एक अलग जोर है, assertSame
, जो ==
ऑपरेटर का उपयोग करता है।
समझने के लिए क्यों ==
स्ट्रिंग्स के साथ उपयोग नहीं किया जाना चाहिए, आपको यह समझने की आवश्यकता है कि ==
क्या करता है: यह पहचान जांच करता है। यही है, a == b
यह देखने के लिए जांच करता है कि a
और b
समान ऑब्जेक्ट देखें। यह भाषा में बनाया गया है, और इसके व्यवहार को विभिन्न वर्गों द्वारा बदला नहीं जा सकता है। दूसरी ओर, equals
विधि, कक्षाओं द्वारा ओवरराइड किया जा सकता है। जबकि इसका डिफ़ॉल्ट व्यवहार (Object
वर्ग में) ==
ऑपरेटर का उपयोग करके पहचान जांच करना है, String
समेत कई कक्षाएं, इसके बजाय "समकक्षता" जांच करने के लिए ओवरराइड करें। String
के मामले में, a
और b
को जांचने के बजाय, उसी ऑब्जेक्ट को देखें, a.equals(b)
यह देखने के लिए जांच करता है कि वे जिन ऑब्जेक्ट्स को संदर्भित करते हैं वे दोनों स्ट्रिंग्स हैं जिनमें बिल्कुल वही वर्ण होते हैं।
एनालॉजी समय: कल्पना करें कि प्रत्येक String
ऑब्जेक्ट कागज़ का एक टुकड़ा है जिस पर लिखा गया है। मान लें कि मेरे पास "फू" के साथ पेपर के दो टुकड़े हैं, और दूसरा "बार" लिखा है। यदि मैं कागज के पहले दो टुकड़े लेता हूं और ==
का उपयोग करने के लिए उनका उपयोग करता हूं तो यह false
लौटाएगा क्योंकि यह अनिवार्य रूप से पूछ रहा है "क्या ये कागज़ का एक ही टुकड़ा है?"। पेपर पर जो लिखा है उसे देखने की भी आवश्यकता नहीं है। तथ्य यह है कि मैं इसे कागज के दो टुकड़े (एक ही दो बार की बजाय) दे रहा हूं इसका मतलब है कि यह false
लौटाएगा। यदि मैं equals
का उपयोग करता हूं, हालांकि equals
विधि पेपर के दो टुकड़े पढ़ेगी और देखें कि वे एक ही चीज़ ("फू") कहते हैं, और इसलिए यह true
वापस आ जाएगा।
स्ट्रिंग्स के साथ भ्रमित होने वाला बिट यह है कि जावा में "इंटर्निंग" स्ट्रिंग्स की अवधारणा है, और यह आपके कोड में किसी भी स्ट्रिंग अक्षर पर स्वचालित रूप से (प्रभावशाली) प्रदर्शन किया जाता है। इसका अर्थ यह है कि यदि आपके कोड में दो समकक्ष स्ट्रिंग अक्षर हैं (भले ही वे अलग-अलग कक्षाओं में हों) तो वे वास्तव में दोनों String
ऑब्जेक्ट का संदर्भ लेंगे। इससे ==
ऑपरेटर true
अधिक से अधिक उम्मीद कर सकता है।
स्रोत
2009-07-29 18:15:48
यदि आप अनिश्चित हैं, तो आप कोड, या जावाडोक पढ़ सकते हैं। बीटीडब्ल्यू अगर आप परीक्षण करना चाहते हैं तो वे वही ऑब्जेक्ट हैं जो आप assertSame का उपयोग कर सकते हैं। –
यदि str1 और str2 शून्य हैं, assertEquals() सत्य है, लेकिन assertTrue (str1.equals (str2)) अपवाद फेंकता है। पहला उदाहरण एक उपयोगी त्रुटि संदेश भी मुद्रित करेगा जैसे str1 और str2 की सामग्री, दूसरा नहीं है। –