"" एक वास्तविक स्ट्रिंग है, यद्यपि एक खाली है।
नल, हालांकि, इसका मतलब है कि स्ट्रिंग चर कुछ भी नहीं करने के लिए इंगित करता है।
a==b
गलत रिटर्न देता है क्योंकि "" और नल स्मृति में एक ही स्थान पर कब्जा नहीं करते हैं - दूसरे शब्दों में, उनके चर समान ऑब्जेक्ट्स को इंगित नहीं करते हैं।
a.equals(b)
झूठा लौटाता है क्योंकि "" अशक्त नहीं के बराबर है।
हालांकि यह अंतर यह है कि चूंकि "" एक वास्तविक स्ट्रिंग है, आप अभी भी इस तरह के तरीकों या कार्यों को लागू कर सकते हैं
a.length()
a.substring(0, 1)
और इसी तरह।
यदि स्ट्रिंग n के बराबर है, तो b, Java NullPointerException
यदि आप किसी को आमंत्रित करने की कोशिश करते हैं, तो कहेंगे:
b.length()
यदि आप जिस अंतर के बारे में सोच रहे हैं वह == बनाम बराबर है, तो यह है:
== संदर्भों की तुलना करता है, जैसे कि मैं गया था
String a = new String("");
String b = new String("");
System.out.println(a==b);
यह झूठा उत्पादन होगा क्योंकि मैंने दो अलग-अलग ऑब्जेक्ट आवंटित किए हैं, और ए और बी अलग-अलग वस्तुओं को इंगित करते हैं।
हालांकि, a.equals(b)
इस मामले में सच लौटेगा, क्योंकि equals
स्ट्रिंग्स के लिए सच वापस आ जाएगा अगर और केवल अगर तर्क स्ट्रिंग शून्य नहीं है और वर्णों के समान अनुक्रम का प्रतिनिधित्व करता है।
हालांकि, चेतावनी दी जाती है कि जावा में स्ट्रिंग्स के लिए एक विशेष मामला है।
String a = "abc";
String b = "abc";
System.out.println(a==b);
आपको लगता है कि उत्पादन होगा false
, क्योंकि यह दो अलग स्ट्रिंग्स आवंटित करना चाहिए। वास्तव में, जावा शाब्दिक स्ट्रिंग्स को आंतरिक करेगा (जो हमारे उदाहरण में बी और बी की तरह आरंभीकृत हैं)। इसलिए सावधान रहें, क्योंकि यह == काम करने पर कुछ गलत सकारात्मक जानकारी दे सकता है।
b.equals(a)
- लेकिन==
अन्य तरीकों से "यह काम नहीं करेगा" स्ट्रिंग तुलना के लिए उपयोग न करें ।null
मान (जो एक खाली स्ट्रिंग से अलग है""
, एक वैध स्ट्रिंग उदाहरण) कर सकते हैं कभी नहीं एक विधि इस पर लागू होता है। समानता के बाईं ओर "ज्ञात गैर-अशक्त" (आमतौर पर एक स्थिर मान या शाब्दिक) को रखना "योदा सशर्त" या कुछ-ऐसा है।