(इस प्रश्न के प्रयोजनों के लिए, हम मान लें कि कोई जानबूझकर ऑटो (अन) मुक्केबाजी का उपयोग नहीं कर रहा है, या तो क्योंकि कोई प्री-जावा 1.5 कोड लिख रहा है, या क्योंकि किसी को लगता है कि ऑटोऑनबॉक्सिंग NullPointerException
एस बनाने में बहुत आसान बनाता है ।)कोई भी बुलीयन और इसी तरह के अपरिवर्तनीय वर्गों पर सार्वजनिक रचनाकारों का उपयोग क्यों करना चाहेगा?
उदाहरण के लिए Boolean
लें। Boolean(boolean)
कन्स्ट्रक्टर के लिए प्रलेखन कहता है:
नोट: यह कन्स्ट्रक्टर का उपयोग करने के लिए शायद ही कभी उचित है। जब तक नया उदाहरण आवश्यक है, स्थिर कारखाना
valueOf(boolean)
आमतौर पर बेहतर विकल्प है। यह प्रदर्शन में काफी बेहतर स्थान और समय पैदा करने की संभावना है।
मेरे सवाल है, तुम क्यों कभी पहली जगह में एक नया उदाहरण प्राप्त करना चाहते हैं? ऐसा लगता है जैसे चीजें सरल होंगी अगर ऐसे निर्माता रचनात्मक थे।
if (myBoolean == Boolean.TRUE)
यह क्योंकि सभी सच्चे Booleans
Boolean.TRUE
के लिए संदर्भ होगा और सभी झूठे Booleans
संदर्भ होगा सुरक्षित हो जाएगा: उदाहरण के लिए, अगर वे थे, तो आप इस कोई खतरा नहीं है (भले ही myBoolean
थे null
) के साथ लिख सकता है Boolean.FALSE
पर। लेकिन क्योंकि कंस्ट्रक्टर्स सार्वजनिक कर रहे हैं, कोई उन्हें इस्तेमाल किया हो सकता है, जिसका अर्थ है कि आप इस के बजाय लिखने के लिए है:
if (Boolean.TRUE.equals(myBoolean))
लेकिन जहां यह वास्तव में बुरा हो जाता है जब आप समानता के लिए दो Booleans
जाँच करना चाहते हैं। कुछ इस तरह:
if (
myBooleanA == myBooleanB ||
(myBooleanA != null && myBooleanA.equals(myBooleanB))
)
अद्यतन:
if (myBooleanA == myBooleanB)
... इस हो जाता है जावा 7 की रिलीज के साथ, java.util.Objects इस सरल संभव का निर्माण करता है:
if (Objects.equals(myBooleanA, myBooleanB))
मैं इन वस्तुओं के अलग-अलग उदाहरण रखने के किसी भी कारण के बारे में नहीं सोच सकता जो उपरोक्त बकवास न करने की तुलना में अधिक आकर्षक है। आपने क्या कहा?
आपको वह अंतिम कोड ब्लॉक गलत है। या तो 'एक == शून्य? बी == शून्य: a.equals (बी) 'या' ए == बी || (ए! = नल एंड ए एक्वल्स (बी)) '। या 'ऑब्जेक्ट्स .एक (ए, बी) '। –
आप सही हैं। मैंने इसे 'ए == बी || में बदल दिया (ए! = नल एंड ए एक्वल्स (बी)) '। –