Stringजावा में समानता के लिए परीक्षण करते समय मैंने हमेशा इसका उपयोग किया है equals()क्योंकि मेरे लिए यह इसके लिए सबसे प्राकृतिक तरीका है। आखिरकार, इसका नाम पहले से ही कहता है कि यह क्या करने का इरादा है। हालाँकि, मेरे एक सहयोगी ने हाल ही में मुझे बताया कि मुझे compareTo() == 0इसके बजाय उपयोग करना सिखाया गया था equals()। यह अप्राकृतिक लगता है (जैसा compareTo()कि आदेश देने के लिए है और समानता के लिए तुलना नहीं) और यहां तक कि कुछ हद तक खतरनाक है (क्योंकि compareTo() == 0जरूरी नहीं कि सभी मामलों में समानता हो, हालांकि मुझे पता है कि यह Stringमेरे लिए है)।
वह नहीं जानता था कि क्यों उसे के compareTo()बजाय का उपयोग करने के equals()लिए सिखाया गया था String, और मैं भी कोई कारण नहीं मिल सका। क्या यह वास्तव में व्यक्तिगत स्वाद की बात है, या विधि के लिए कोई वास्तविक कारण है?
compareTo() == 0जरूरी नहीं कि सभी मामलों में समानता हो"। यह बिल्कुल सही है! यह वास्तव में जावा एपीआई विनिर्देशों में वाक्यांश "बराबरी के अनुरूप" का अर्थ है, उदाहरण के लिए तुलनीय वर्ग विनिर्देश में। उदाहरण के लिए, स्ट्रिंग की तुलना विधि बराबरी के साथ संगत है, लेकिन BigDecimal के तुलना विधि है असंगत बराबरी के साथ।
.equalsIgnoreCase()अगर यह उचित है, तो सबसे तेज़ तुलना.equals()है।