2011-12-01 23 views
13

हो सकता है, मैं बस सोच रहा था कि ऐसा करने का एक बेहतर तरीका है या नहीं। मुझे लगता है कि यह अक्षम हो सकता है। समस्या डीबी कारणों के लिए है, मुझे तारों की तुलना करने की आवश्यकता है जो कभी-कभी शून्य हो या नहीं।स्ट्रिंग्स की तुलना करने का एक बेहतर तरीका जो शून्य

public static boolean compareStrings(String str1, String str2){ 

    if(str1 == null && str2 == null) return true; 

    if(str1 != null && str2 != null){ 
     if(str1.equals(str2)) 
      return true; 
    } 

    return false; 
} 
+0

को http विस्थापित दो स्ट्रिंग तुलना कर रहे हैं, तो: //codereview.stackexchange.com/...? –

+0

बहुत खेद है भविष्य में ऐसा होगा – Maurycy

उत्तर

46

सामान्य मुहावरा यह है:

return (str1 == null ? str2 == null : str1.equals(str2)); 
+19

मैं सिर्फ यह जोड़ना चाहता हूं कि मैं एंड्रॉइड और TextUtils.equals (ए, बी) के लिए ऐसा कर रहा था; वास्तव में यह – Maurycy

1

इस कोड को केवल अक्षम हो सकता है अगर यह अपने कार्यक्रम के एक सामान्य निष्पादन के दौरान एक टोंटी कारण बनता है। यह जानना एकमात्र तरीका है कि यह मामला है कि आप अपने प्रोग्राम को प्रोफाइलर के माध्यम से चलाएं। जब तक आप ऐसा नहीं करते हैं और इस तथ्य को देखते हैं कि यह फ़ंक्शन प्रदर्शन समस्याओं का कारण बनता है, तो मैं इसके बारे में चिंता नहीं करता।

+0

यह मेरे लिए विशेष रूप से प्रोफ़ाइल के बिना चिंता करने के लिए थोड़ा चुनौतीपूर्ण हो सकता है। मैं आमतौर पर प्रोफाइलर्स का उपयोग नहीं करता जब तक कि मैं स्मृति रिसाव में नहीं आ जाता। मैं अपने आप की एक स्थिर विधि विकसित करने से बेहतर कार्यान्वयन करता था, तो मैं कम या ज्यादा सोच रहा था। धन्यवाद – Maurycy

29

आप कहते हैं कि ये संभावित रूप से डेटाबेस से आ रहे हैं। उस बिंदु पर, कुछ शून्यता परीक्षणों के आस-पास की कोई भी अक्षमता ईमानदार होने के लिए डेटाबेस प्रश्नों की लागत के मुकाबले पूरी तरह से महत्वहीन नहीं है। मैं पठनीयता पर ध्यान केंद्रित करूंगा।

कि अंत करने के लिए

, मैं Guava और उसके Objects वर्ग का उपयोग शुरू होगा:

boolean equal = Objects.equal(a, b); 

मुझे लगता है कि Taymon के कोड के अनुसार लागू किया जाना, मूल रूप से उम्मीद होती है - लेकिन यह एक स्थान में होना अच्छा रहेगा जो ।

संपादित करें: जावा 7 के लिए आपको गुवा की आवश्यकता नहीं है। आप बस java.util.Objects.equal(a, b) का उपयोग कर सकते हैं।

+0

जहां तक ​​"पठनीयता" है ... जो वास्तव में मुझे 'ऑब्जेक्ट। रेफरेंस एक्वाल्स' के बारे में सोचता है, जो अच्छी बात नहीं है :( –

+0

@pst: यह आपको स्थिर 'ऑब्जेक्ट' के बारे में सोचने चाहिए। विधि, जो पहले से ही अंतर्निहित है .NET। –

+11

किसी और के लिए हाल ही में आने वाले किसी के लिए, अब भी जावा 7 में है: [ऑब्जेक्ट्सequals] (http://docs.oracle.com/javase/7 /docs/api/java/util/Objects.html#equals%28java.lang.Object,%20java.lang.Object%29) –

4

आप तो Apache Commons StringUtils का उपयोग कर के लिए खुला वे बराबर जो अशक्त-सुरक्षित

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