यदि आप स्ट्रिंग अक्षरों के संचालन पर "==" ऑपरेटर का उपयोग कर रहे हैं, तो यह इस बात पर निर्भर करता है कि स्ट्रिंग अक्षर का मूल्य "स्ट्रिंग पूल" पर मौजूद है या नहीं, आपके केस वैरिएबल "str" में एक स्ट्रिंग JVM है पहली बार "स्ट्रिंग पूल" पर चेक करता है यदि यह पाया जाता है तो यह सत्य और गलत लौटाता है। प्रशिक्षु() विधि के लिए दस्तावेज़ के अनुसार पर "स्ट्रिंग पूल"
String str = "";
int test = 3;
str = String.valueOf(test).intern();
System.out.println("str[" + str + "]\nequals result[" + (str == "3") + "]");
if (str == "3") {
System.out.println("if");
} else {
System.out.println("else");
}
स्ट्रिंग शाब्दिक उपलब्ध बनाने के लिए विधि प्रशिक्षु() के साथ निम्नलिखित कोड का प्रयास करें,: प्रशिक्षु() विधि के लिए तार का एक आंतरिक तालिका खोज एक स्ट्रिंग के बराबर एक स्ट्रिंग। यदि स्ट्रिंग तालिका में नहीं है, तो यह जोड़ा जाता है। तालिका में निहित स्ट्रिंग का उत्तर देता है जो इस स्ट्रिंग के बराबर है। एक ही स्ट्रिंग ऑब्जेक्ट को तारों के लिए हमेशा उत्तर दिया जाता है जो बराबर होते हैं।
अच्छी तरह से स्ट्रिंग तुलना के लिए "== "ऑपरेशन की अनुशंसा नहीं की जाती है। बराबर() या equalsIgnoreCase() विधि() का उपयोग करें।
मैंने जावा 1 में भी कोशिश की।7 प्रशिक्षु के बिना() उत्पादन
str[3]
equals result[false]
else
प्रशिक्षु के साथ (है) उत्पादन की बात आती है:
str[3]
equals result[true]
if
इस JDK 1.4 की समस्या नहीं है और 1.5 यह एक "तार्किक है त्रुटि "।
स्ट्रिंग समानता की जांच '3" के साथ की जाती है .equals (str) 'और' == 'ऑपरेटर के साथ नहीं। –
इसका जेडीके के बीच के अंतर के साथ कुछ भी नहीं है, लेकिन जावा में 'स्ट्रिंग' तुलना कैसे काम करती है इसकी आपकी समझ है। जावा में ऑब्जेक्ट समानता की तुलना करने के लिए मेरी पिछली टिप्पणी – MadProgrammer
में दिए गए लिंक को देखें, आपको = बराबर का उपयोग करना होगा, अगर वे उसी ऑब्जेक्ट पर प्रतिक्रिया दे रहे हैं ... यदि वे इंटर्न किए गए थे तो यह सच हो जाएगा। – nachokk