में java.lang.String के लिए संदर्भ समानता एक उम्मीद करेगा कि स्ट्रिंग्स अपरिवर्तनीय हैं, भले ही मूल्य-समानता और संदर्भ-समानता जावा के लिए समान नहीं होगी। लैंग। स्केल में ऑब्जेक्ट्स स्ट्रिंग। इसका मतलब है कि दो स्ट्रिंग-होल्डिंग val
एस संदर्भ-बराबर नहीं होना चाहिए, भले ही उनके तार समान हों।स्कैला
scala> val s1 = "a"; val s2 = "a"
s1: java.lang.String = a
s2: java.lang.String = a
scala> s1 eq s2
res0: Boolean = true
किसी भी विचार क्यों परिणाम false
नहीं था: लेकिन यहाँ क्या मैं एक 2.9.1.final आरईपीएल में मिलता है? के बजाय List("a")
के साथ एक ही प्रयोग अपेक्षित काम करता है। eq
विधि को AnyRef में अंतिम के रूप में चिह्नित किया गया है। क्या कोई कंपाइलर जादू विशेष रूप से String
या java.lang.String
के लिए किया गया है?
धन्यवाद! दिलचस्प बात यह है कि जब मैं 'val s1 = "aa" से शुरू करने के लिए अपना उदाहरण बदलता हूं; वैल एस 2 = "ए" + "ए" ', परिणाम अभी भी वही है, भले ही" "एक" + "एक निरंतर अभिव्यक्ति नहीं है (है ना?)। तो ऐसा लगता है कि जावा स्पेक के मुकाबले स्काला थोड़ा अधिक करता है। –
'" ए "+" ए "** ** ** निरंतर अभिव्यक्ति है, [निरंतर अभिव्यक्तियां] देखें (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html # जेएलएस -15.28) – fredoverflow
निरंतर अभिव्यक्तियों के लिए जावा स्पेक स्कैला के लिए बिल्कुल समान नहीं लगता है। उदाहरण के लिए, उस कॉन्स्टेंट एक्सप्रेशन पेज पर दिए गए उदाहरणों में से एक का उपयोग करके, "पूर्णांक" + java.lang.Long.MAX_VALUE + "शक्तिशाली बड़ा है।" 'स्केलैक द्वारा प्रशिक्षित नहीं है। –