Java में दोनों == और equals() मेथड दो वेरिएबल्स या ऑब्जेक्ट्स की समानता चेक करने के लिए उपयोग किए जाते हैं।
महत्वपूर्ण अंतर
| क्र.सं. | की | == |
equals() मेथड |
|---|---|---|---|
| 1 | प्रकार | == एक ऑपरेटर है। |
equals() Object क्लास का एक मेथड है। |
| 2 | तुलना | == रेफरेंस तुलना के लिए उपयोग किया जाता है। यह चेक करता है कि दोनों रेफरेंस एक ही लोकेशन पॉइंट करते हैं या नहीं। |
equals() मेथड कंटेंट तुलना के लिए उपयोग किया जाता है। यह कंटेंट का मूल्यांकन करके समानता चेक करता है। |
| 3 | ऑब्जेक्ट | == ऑपरेटर को ओवरराइड नहीं किया जा सकता। |
equals() मेथड यदि मौजूद न हो तो Object.equals() उपयोग होता है, अन्यथा इसे ओवरराइड किया जा सकता है। |
उदाहरण: == vs equals()
JavaTester.java
public class JavaTester {
public static void main(String args[]) {
String s1 = new String("TUTORIALSPOINT");
String s2 = new String("TUTORIALSPOINT");
// रेफरेंस तुलना
System.out.println(s1 == s2); // false - अलग ऑब्जेक्ट्स
// कंटेंट तुलना
System.out.println(s1.equals(s2)); // true - समान कंटेंट
// इंटीजर-टाइप
System.out.println(10 == 10); // true - प्रिमिटिव वैल्यू
// चार-टाइप
System.out.println('a' == 'a'); // true - प्रिमिटिव वैल्यू
}
}
आउटपुट
false true true true
अतिरिक्त महत्वपूर्ण बिंदु
- String इंटर्निंग:
String s1 = "hello"; String s2 = "hello";मेंs1 == s2true होगा क्योंकि स्ट्रिंग लिटरल पूल में स्टोर होते हैं - ऑटोबॉक्सिंग:
Integer a = 100; Integer b = 100;मेंa == btrue होगा (-128 से 127 तक कैश्ड) - कस्टम क्लास: अपनी क्लास में
equals()औरhashCode()ओवरराइड करें ताकि कंटेंट बेस्ड तुलना काम करे
कस्टम क्लास उदाहरण
public class Person {
private String name;
private int age;
// कंस्ट्रक्टर, गेटर, सेटर...
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}