Autoboxing बल्कि डरावना है। जब मैं पूरी तरह से ==
और .equals
के बीच अंतर समझना मैं लेकिन मदद नहीं कर सकता मुझे से बाहर का पालन बग नरक है:संकलक/जेवीएम सिर्फ "बस काम" ऑटोबॉक्सिंग क्यों नहीं कर सकता?
final List<Integer> foo = Arrays.asList(1, 1000);
final List<Integer> bar = Arrays.asList(1, 1000);
System.out.println(foo.get(0) == bar.get(0));
System.out.println(foo.get(1) == bar.get(1));
प्रिंट कि
true
false
वे इसे इस तरह क्यों किया? यह कैश इंटीग्रर्स के साथ कुछ करने के लिए है, लेकिन अगर ऐसा है तो वे प्रोग्राम द्वारा उपयोग किए जाने वाले सभी इंटीग्रियों को कैश क्यों नहीं करते? या JVM हमेशा प्राचीन के लिए ऑटो अनबॉक्स क्यों नहीं करता है?
प्रिंटिंग झूठी झूठी या सच्ची सत्य बेहतर तरीके से होती।
संपादित
मैं पुराने कोड का टूटना सहमत नहीं हैं। foo.get(0) == bar.get(0)
होने से सच हो गया है कि आप कोड को तोड़ चुके हैं।
इस बाइट कोड में पूर्णांक के साथ पूर्णांक की जगह (जब तक यह शून्य सौंपा कभी नहीं किया गया है)
यह बस काम करता है !! जिस तरह से आप उम्मीद की थी;) – OscarRyz
असल में आपके उदाहरण को ऑटोबॉक्सिंग के साथ बहुत कम करना है, यह व्यवहार इसकी भविष्यवाणी करता है। यह सच है कि ऑटोबॉक्सिंग हमें इसके बारे में अधिक जागरूक करने के लिए मजबूर करता है: बराबर() वस्तुओं की तुलना करने का (आमतौर पर सही) तरीका है, == प्राइमेटिव की तुलना करने का एकमात्र तरीका है ... autoboxing प्रोग्रामर को इंटीजर और int का इलाज करने में मदद करता है (लगभग) एक दूसरे के रूप में ... और इसलिए यहां कीड़े का खतरा। – leonbloy
यह pecularities के कारण हो सकता है जो स्ट्रिंग के उदाहरणों को भी प्रभावित करता है। जहां तक मैं चीजों को समझता हूं, मूल्य के अनुसार दृश्यों के पीछे कुछ पूलिंग हो रही है।इसे 'नया' कीवर्ड का उपयोग करके रोका जा सकता है। –