जब ==
के दोनों ओरnull
या है अगर ==
के पहले संकार्य अशक्त करने के लिए मूल्यांकन करता है, तो स्काला equals
आह्वान नहीं होंगे। तो, इस मामले में, हाँ, x == null
x eq null
जैसा ही है; equals
विधि लागू नहीं है। नीचे दिए गए मामलों पर ध्यान दें।
इस पर विचार करें:
class X {
// this is just for testing
// any equals that returns true when the other object is null
// is arguably broken. thus even though it may be invoked
// the end semantics should remain the same
override def equals(x: Any) = true
}
var x = new X()
x == null // false -- compiler optimization?
null == x // false
var y = null
y == x // false -- see documentation below, y is null, x is not
x == y // true -- x does not evaluate to null, equals invokes
x eq y // false
और ध्यान दें कि:
एक चेतावनी में
(new X()) == null
परिणाम कह एक "एक ताजा वस्तु" (शून्य करने के लिए) बराबर कभी नहीं होगा।
मुझे संदेह है कि x == y
x == null
(बराबर बराबर लागू किया जाना चाहिए) से थोड़ा अधिक/अलग कोड उत्सर्जित हो सकता है, लेकिन जांच नहीं की है।
हैप्पी कोडिंग।
धारा 6.3 (शून्य मान) स्काला भाषा विशिष्टता के इस कहना है:
शून्य मान प्रकार scala.Null की है, और इस तरह हर संदर्भ के साथ संगत है प्रकार। यह संदर्भ मान को दर्शाता है जो एक विशेष "शून्य" ऑब्जेक्ट को संदर्भित करता है। इस प्रकार इस वस्तु वर्ग scala.AnyRef में तरीकों को लागू करता है:
- [अमान्य] eq (x) और [अमान्य] == (एक्स) iff तर्क एक्स सच लौट भी "अशक्त" वस्तु है।
- ne (x) और! = (X) सही वापसी अगर if x भी "शून्य" ऑब्जेक्ट नहीं है।
- isInstanceOf [टी] हमेशा झूठी वापसी करता है।
- asInstanceOf [टी] scala.AnyRef के अनुरूप होने पर "शून्य" ऑब्जेक्ट स्वयं लौटाता है, और अन्यथा NullPointerException फेंकता है।
"शून्य" ऑब्जेक्ट के किसी भी अन्य सदस्य का संदर्भ NullPointerException को फेंकने का कारण बनता है।
स्रोत
2011-08-14 06:08:43
लेकिन 'शून्य' के साथ तुलना करने के लिए, क्या कोई अंतर है? क्या मैं यहां 'null == last' का उपयोग कर सकता हूं? – Freewind