/ जावा - जावा में "==" ऑपरेटर पर स्पष्टीकरण

जावा - जावा में "==" ऑपरेटर पर स्पष्टीकरण

    Integer i = new Integer(10);
Integer j =10;
System.out.println(i==j); // false

String a1 = new String("abc");
String a2 = "abc";
System.out.println(a1==a2); // false

लेकिन जावा को अधिक मेमोरी कुशल बनाने के लिए, जेवीएममेमोरी के एक विशेष क्षेत्र को अलग करता है जिसे "स्ट्रिंग स्थिर पूल" कहा जाता है। जब संकलक एक स्ट्रिंग शाब्दिक का सामना करता है, तो यह देखने के लिए पूल की जांच करता है कि क्या समान स्ट्रिंग पहले से मौजूद है। यदि कोई मिलान पाया जाता है, तो नए शाब्दिक का संदर्भ मौजूदा स्ट्रिंग को निर्देशित किया जाता है, और कोई नया स्ट्रिंग शाब्दिक ऑब्जेक्ट नहीं बनाया जाता है। (मौजूदा स्ट्रिंग का बस एक अतिरिक्त संदर्भ है।) इसलिए स्ट्रिंग लिटरल्स अपरिवर्तनीय हैं। तो, a1 और a2 दोनों में एक ही मेमोरी लोकेशन की ओर इशारा करते हुए दो संदर्भ होंगे तो क्यों "==" doesn "t रिटर्न सही है?

उत्तर:

जवाब के लिए 2 № 1

ऐसा इसलिए होता है क्योंकि a1 शाब्दिक नहीं है। यह एक नया है String कि आप स्ट्रिंग पूल के बाहर, ढेर पर बनाया है। जिस कंस्ट्रक्टर का आपने वास्तव में उपयोग किया था, उसकी नकल की String एक नए स्थान पर। हालाँकि, a2 स्ट्रिंग पूल में है।