सार्वजनिक वर्ग डेमो {public static void main (स्ट्रिंग [] args) {String s1 = "Hello"; स्ट्रिंग s2 = "हैलो"; System.out.println ("s1 == s2" + (s1 == s2)); स्ट्रिंग s5 = "हेल" + "लो"; स्ट्रिंग s6 = "He" + "llo"; System.out.println ("s5 == s6" + (s5 == s6)); स्ट्रिंग s7 = "He"; स्ट्रिंग s8 = "हैलो"; S7 = s7.concat ("llo"); System.out.println ("s7 == s8" + (s7 == s8)); स्ट्रिंग s10 = "He"; S10 = s10 + "llo"; System.out.println ("s1 == s10" + (s1 == s10)); }}
पूर्ववर्ती कोड में s7 == s8 और s1 == s10 झूठी दे। क्या कोई मुझे समझा सकता है, वास्तव में क्या हुआ है s7 = s7.concat ("llo"); और s10 = s10 + "llo"; मैं समझता हूं कि == ऑपरेटर चेक और वस्तु के बराबर () जांच करता है। लेकिन मुझे यह जानना होगा कि S7 और s10 संदर्भ चर बिट पैटर्न S8 और S1 से भिन्न क्यों हैं यदि ये चीजें समय से उत्पन्न स्ट्रिंग्स को संकलित करती हैं और समय उत्पन्न स्ट्रिंग्स से संबंधित हैं, तो मैं यह कैसे पहचान सकता हूं कि यह समय संकलन करता है या समय की स्ट्रिंग चलाता है?
ऐसा क्यों हो रहा है क्योंकि जावा कंपाइलर में अनुकूलन कर रहा है जब यह देखता है कि आप शाब्दिक स्ट्रिंग "नमस्ते"
को s1 के लिए निर्दिष्ट कर रहे हैं, तो यह S2 के लिए एक ही "हैलो" का उपयोग करता है, क्योंकि सभी जावा स्ट्रिंग ऑपरेशन गैर-विनाशकारी हैं (जैसे वे एक क्लोन लौटते हैं मूल को संशोधित करने की तुलना में), तो यह एक सुरक्षित बात है।
उसी प्रकार "हेल" + "लो"
बनाम "वह" + "लोलो"
; यह समझने में काफी चतुर है कि वे एक ही बात हैं।
दूसरों की जटिलता इतनी जटिल है कि वे उन्हें अनुकूलित नहीं कर सकते, और इस प्रकार आप अलग-अलग वस्तुओं के साथ समाप्त होते हैं।
Comments
Post a Comment