Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में बराबर () और हैशकोड () विधियों के बीच अनुबंध क्या है?

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

हैशकोड () विधि

public int hashCode()

यह विधि एक पूर्णांक . लौटाती है मान, जिसे किसी वस्तु के हैश कोड मान के रूप में संदर्भित किया जाता है। प्रत्येक वस्तु, निर्माण के समय एक अद्वितीय 32-बिट, हस्ताक्षरित int मान के साथ असाइन की गई है। यह मान उस वस्तु का हैश कोड मान है।

हैशकोड () विधि से जुड़ा सामान्य अनुबंध

  • हैशकोड () विधि को इस विधि के प्रत्येक कॉलिंग के लिए उसी ऑब्जेक्ट के लिए समान पूर्णांक मान वापस करना चाहिए जब तक कि ऑब्जेक्ट में संग्रहीत मान संशोधित न हो।
  • यदि दो वस्तुएँ समान हैं (बराबर () के अनुसार) विधि) फिर हैशकोड () विधि को दोनों वस्तुओं के लिए समान पूर्णांक मान लौटाना चाहिए।
  • लेकिन, यह आवश्यक नहीं है कि हैशकोड () विधि उन वस्तुओं के लिए विशिष्ट परिणाम लौटाएगी जो समान नहीं हैं (बराबर () के अनुसार) विधि)।

बराबर() विधि

public boolean equals(Object obj)

बराबर () ऑब्जेक्ट क्लास की विधि वस्तुओं की समानता की जांच करती है और तदनुसार यह रिटर्न सच या झूठा . डिफ़ॉल्ट कार्यान्वयन, जैसा कि ऑब्जेक्ट क्लास द्वारा प्रदान किया गया है, यदि दोनों संदर्भ एक ही ऑब्जेक्ट को संदर्भित करते हैं, तो वस्तुओं की समानता की जांच करता है। यह वस्तुओं के मूल्य या स्थिति की जाँच नहीं करता है। लेकिन हम वस्तुओं की स्थिति या मूल्य की तुलना करने के लिए स्वयं का कार्यान्वयन प्रदान करने के लिए इस पद्धति को ओवरराइड कर सकते हैं।

बराबर () पद्धति से संबद्ध सामान्य अनुबंध

किसी भी गैर-शून्य संदर्भ चर के लिए a, b और c

  • a.equals(a) हमेशा सत्य लौटना चाहिए ।
  • a.equals(b) वापस आना चाहिए सत्य अगर और केवल अगर b.equals(a) सच लौटता है।
  • यदि a.equals(b) सत्य लौटाता है और b.equals(c) सत्य लौटाता है फिर a.equals(c) वापस आना चाहिए सत्य
  • एकाधिक कॉलिंग a.equals(b) लगातार सत्य लौटना चाहिए या लगातार गलत लौटाएं यदि किसी वस्तु के लिए वस्तु का मूल्य संशोधित नहीं किया गया है।
  • a.equals(null) वापस लौटना चाहिए झूठा

इसलिए हैशकोड () . को ओवरराइड करना आवश्यक है ऑब्जेक्ट क्लास की विधि अगर हम बराबर () . को ओवरराइड कर रहे हैं विधि।

उदाहरण

public class MainClass {
   public static void main(String[] args) {
      MainClass mainClass = new MainClass();
      TestClass obj1 = new TestClass(1);
      TestClass obj2 = new TestClass(1);
      mainClass.test1(obj1, obj2);
      TestClass obj3 = new TestClass(1);
      TestClass obj4 = new TestClass(2);
      mainClass.test2(obj3, obj4);
   }
   public void test1(TestClass obj1, TestClass obj2) {
      if (obj1.equals(obj2)) {
         System.out.println("Object One and Object Two are equal");
      }
      else {
         System.out.println("Object One and Object Two are not equal");
      }
   }
   public void test2(TestClass obj3, TestClass obj4) {
      if (obj3.equals(obj4)) {
         System.out.println("Object Three and Object Four are equal");
      }
      else {
         System.out.println("Object Three and Object Four are not equal");
      }
   }
}
class TestClass {
   private int val;
   TestClass(int val) {
      this.val = val;
   }
   public int getValue() {
      return val;
   }
   @Override
   public boolean equals(Object o) {
      // null check
      if (o == null) {
         return false;
      }
      // this instance check
      if (this == o) {
         return true;
      }
      // instanceof Check and actual value check
      if ((o instanceof TestClass) && (((TestClass) o).getValue() == this.val)) {
         return true;
      }
       else {
         return false;
      }
   }
   @Override
   public int hashCode() {
      int result = 0;
      result = (int) (val / 11);
      return result;
   }
}

आउटपुट

Object One and Object Two are equal
Object Three and Object Four are not equal

  1. जावा में JFrame और JDialog में क्या अंतर हैं?

    जेफ्रेम फ्रेम में जोड़े गए घटकों को इसकी सामग्री के रूप में संदर्भित किया जाता है, इन्हें contentPane द्वारा प्रबंधित किया जाता है . JFrame . में एक घटक जोड़ने के लिए , हमें इसके contentPane . का उपयोग करना चाहिए इसके बजाय। एक JFrame शीर्षक . के साथ एक विंडो है , सीमा , (वैकल्पिक) मेनू बार और उप

  1. JRE और JDK में क्या अंतर है?

    जेडीके (जावा डेवलपमेंट किट) में जेआरई सहित जावा अनुप्रयोगों को विकसित करने और चलाने के लिए सभी आवश्यक उपकरण और पुस्तकालय शामिल हैं। जेआरई जावा रन टाइम एनवायरनमेंट सॉफ्टवेयर का एक टुकड़ा है जिसमें जावा प्रोग्राम को निष्पादित करने के लिए आवश्यक जेवीएम और अन्य पुस्तकालय शामिल हैं।

  1. जावा और जावास्क्रिप्ट में क्या अंतर है?

    जैसा कि वेब डेवलपर जेरेमी कीथ ने 2009 में कहा था, जावा जावास्क्रिप्ट के लिए है जैसे हैम हैम्स्टर के लिए है। उस सादृश्य की सटीक सटीकता बहस का विषय है, लेकिन इसके पीछे की भावना ठोस है:जावा और जावास्क्रिप्ट, एक सामान्य भाषाई मूल साझा करने के बावजूद, दो बहुत अलग प्रोग्रामिंग भाषाएं हैं। इन वर्षों में, व