java - जावा में "": I बराबर




operators (6)

जावा में दो मूल्यों की तुलना करते समय, आप कैसे परीक्षण करते हैं यदि दोनों प्रकार और मूल्य समान हैं?

मुझे पता है कि जावास्क्रिप्ट === का उपयोग इसे पूरा करने के लिए किया जा सकता है, इसलिए मैंने जावा में कोशिश की, लेकिन यह काम नहीं किया।

मुझे पता है कि यह एक सरल प्रश्न है, लेकिन मैंने इसे देखने की कोशिश की और मुझे पता नहीं चला कि यह क्या था।


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

निम्नलिखित कार्यान्वयन के संबंध में:

float[] s1 = {1,2,3};
int[] s2 = {1,2,3};
//compareDatab gives false

अधिक जानकारी के लिए आधिकारिक जावा एपीआई भी देखें https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html


जावा में सत्य और मिथ्या की कोई अवधारणा नहीं है, इस प्रकार कोई तुलनात्मक संचालक नहीं है।


मैं इसके लिए अपनी तुलना लिखने का कोई लाभ नहीं देख सकता। खासकर अगर इसके लिए पहले से ही एक देशी कार्यान्वयन है।

java.util.Objects आपका मित्र है।

इसमें बहुत कम सहायक होते हैं, जैसे

Objects.compare(object1, object2, comparator);
Objects.equals(object1, object2);
Objects.deepEquals(object1, object2);
Objects.hash(object1, object2, object3, ...);

मैं हैशकोड विधियों में बराबरी और Objects.hash में लेखन में Objects.equals का उपयोग करता हूं। यह आपके लिए अशक्त जाँच भी करता है और अंत में कोड बहुत साफ और पठनीय लगता है।

उदाहरण में:

...

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (!(o instanceof Customer)) {
        return false;
    }
    Customer that = (Customer) o;
    return Objects.equals(firstName, that.firstName)
            && Objects.equals(lastName, that.lastName)
            && Objects.equals(street, that.street)
            && Objects.equals(houseNumber, that.houseNumber)
            && Objects.equals(postalCode, that.postalCode)
            && Objects.equals(city, that.city)
            && Objects.equals(emailAddress, that.emailAddress);
}

@Override
public int hashCode() {
    return Objects.hash(firstName,
            lastName,
            street,
            houseNumber,
            postalCode,
            city,
            emailAddress);
}

...

मैंने एक फ़ंक्शन बनाया जो r जावा में जावास्क्रिप्ट के === की कार्यक्षमता को दर्शाता है

public class MyClass {

  private final int val;
  private final String name;

  public MyClass(int val, String name) {
     this.val = val;
     this.name = name;
  }

  public int getVal() { return val; }

  public String getName() { return name; }

  public boolean equals(Object o) {
     if(o == null) return false;
     if(this == o) return true;
     if(!this.getClass().getSimpleName().equals(o.getClass().getSimpleName()) return false;

     MyClass other = (MyClass) o;

     return this.getVal() == other.getVal() && this.getName().equals(other.getName());
  }

  public int hashCode() { ... }

}

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

इस फ़ंक्शन को कॉल इस तरह दिखता है:

static boolean compareData(Object v1, Object v2)
{
    if(v1 != null && v2 != null)
        return (v1.getClass() == v2.getClass() && (v1.toString().equals(v2.toString())));
    else
    {
        return (v1 == null ? v2 == null : v1.equals(v2));
    }
}
float s1 = 0.f;
float s2 = 0.1f;

System.out.println(compareData(s1, s2)); //Returns false
float s1 = 0.0f;
float s2 = 0.0f;

System.out.println(compareData(s1, s2)); //Returns true
float s1 = 0.1f;
String s2 = "0.1f";

System.out.println(compareData(s1, s2)); //Returns false 
String s1 = "sdf";
String s2 = null;

System.out.println(compareData(s1, s2)); //Returns false 

और इसी तरह...

अद्यतन: मैं सरणियों की तुलना करने में भी कामयाब रहा, निम्नलिखित कोड स्निपेट है, लेकिन, मैंने इस कोड का गहनता से परीक्षण नहीं किया है, लेकिन मेरे द्वारा किए गए प्रत्येक परीक्षण मामले के लिए काम किया है।

String s1 = null;
String s2 = null;

System.out.println(compareData(s1, s2)); //Returns true

उपरोक्त स्निपेट का उपयोग (निम्नलिखित इनिशियलाइज़ेशन उपरोक्त कोड स्निपेट, smh: P से पहले किया जाना चाहिए):

if(s1 != null && s2 != null)
    if(s1.getClass().isArray() && s2.getClass().isArray())
        compareDatab = s1.getClass().equals(s2.getClass()) && (Arrays.toString(s1).equals(Arrays.toString(s2)));
    else
        compareDatab = compareData(s1, s2);
else
    compareDatab = compareData(s1, s2);
//s1 and s2 can be anything including Arrays and non-Array...
int[] s1 = {1,2,3};
int[] s2 = {1,2,3};
//compareDatab gives true
int[] s1 = {1,2,4};
int[] s2 = {1,2,3};
//compareDatab gives false

जहाँ तुलनात्मकता () इस उत्तर में पूर्व की तरह ही कार्य है

आशा है कि यह आपके लिए उपयोगी साबित होगा। :)


यदि हम JS में दो चर की तुलना करते हैं तो हम "==" और "===" दोनों का उपयोग कर सकते हैं। "==" मूल्यों की तुलना करें और "===" प्रकारों की भी तुलना करें।

var x = 10;
var y = '10';
console.log(x == y)  // true
console.log(x === y) // false

और जावा में यह आपको संकलित त्रुटि देता है क्योंकि प्रकार समान नहीं है।


=== कमजोर टाइप की भाषाओं में उपयोगी है, जैसे कि जावास्क्रिप्ट, क्योंकि यह सत्यापित करता है कि जिन वस्तुओं की तुलना की जा रही है वे एक ही प्रकार की हैं और अंतर्निहित रूपांतरण से बचती हैं।

=== जावा जैसी दृढ़ता से टाइप की गई भाषा में इसका कोई उपयोग नहीं है क्योंकि आप ऐसा करने के लिए एक विशिष्ट विधि लिखे बिना विभिन्न प्रकार के चर की तुलना नहीं कर सकते हैं।








operators