2010-01-29 16 views
10

कभी कभी भले ही वे अशक्त हो सकता है मैं इस देखें:जांचना कि दो वस्तुओं के बराबर हैं,

if (a.equals(b)) do(something); 

हालांकि, अगर a बातिल, एक NullPointerException फेंक दिया है। मान लें कि a==null और b==null या यदि a==b है कि मैं do(something) करना चाहता हूं। अपवाद प्राप्त किए बिना इस चेक को करने का सबसे आसान तरीका क्या है?

+0

एक विशेष मामले के रूप में शून्य को संभालना? ऐसा लगता है कि ऐसा एक छोटा सा समाधान है जो मुझे लगता है कि ऐसा कोई कारण नहीं है जिसे आप ऐसा नहीं कर सकते? कृपया विस्तार से बताएं। –

+0

यह इतना छोटा लगता है ना? ऐसा लगता है कि दो अन्य स्टंप हो गए हैं। यह एक दिलचस्प साक्षात्कार सवाल करेगा। यह मुश्किल नहीं है, लेकिन यह एक आसान तरीके से करना मुश्किल है। – User1

+0

कभी-कभी जो चीजें सरल दिखती हैं वे हमेशा पूरा करने के लिए सबसे आसान नहीं होती हैं। यह पहला सबक था जिसे मैंने कैलकुस में सीखा था, और किसी भी चीज में पकड़ने की तलाश में मुझे गलत गलतियों से बचाया गया है – Jason

उत्तर

22
if(a==b || (a!=null && a.equals(b))) 

(a==b मामला है जब दोनों अशक्त हैं संभालती है।)


इसके अलावा जावा 7 के बारे में पता हो सकता है और Object.equals विधि से ऊपर:

if(java.util.Object.equals(a, b)) 
+4

+1, यह बहुत कुछ है .equals() उपयोगिता विधियां भी करते हैं। उदाहरण के लिए: http://commons.apache.org/lang/api/org/apache/commons/lang/ObjectUtils.html#equals%28java.lang.Object ,%20java.lang.Object%29 – PSpeed

+1

चूंकि सभी बराबर नहीं हैं() विधियों में "अगर (ओ == यह) सत्य लौटाता है" अनुकूलन, मुझे लगता है कि यह फॉर्मूलेशन स्पष्ट विजेता है, और यही वह है जिसे मैंने गुवा के ऑब्जेक्ट्स .equal() विधि में उपयोग किया था। –

+0

बहुत अच्छा जवाब। सिर्फ एक नोट: आपके उत्तर में, ** ऑब्जेक्ट ** होना चाहिए ** ऑब्जेक्ट्स ** –

24

इसे लिखने का एक और तरीका ।

if (a == null ? b == null : a.equals(b)) 
+1

बहुत अच्छी तरह से पढ़ता है! – fastcodejava

+3

स्वीकार्य उत्तर –

+0

@Steve से अधिक पढ़ने योग्य है - यह राय का विषय है। –

संबंधित मुद्दे