2013-01-11 17 views
13

मैं एक शर्त निर्धारित करने की कोशिश कर रहा हूं और निम्नानुसार गलत या गलत सेट करता हूं लेकिन यह हर समय झूठा लौटाता है।जावा टर्नरी ऑपरेटर सही या गलत सेट करने के लिए

boolean checked = (categoriesCursor.getString(3) == "1") ? true 
        : false; 

Log.i("Nomad",categoriesCursor.getString(3)+ " "+checked); 

जब मैं मानों को आउटपुट करने का प्रयास करता हूं तो मुझे निम्न मिलता है।

01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 1 false 
01-12 00:05:38.072: I/Nomad(23625): 0 false 
01-12 00:05:38.072: I/Nomad(23625): 0 false 
+7

आपके कोड पर एक टिप्पणी: आप यहां टर्नरी ऑपरेटर का उपयोग क्यों कर रहे हैं? आप बस 'बूलियन चेक = "1" .equals (श्रेणियां कर्सर.जेटस्ट्रिंग (3)) कह सकते हैं; ' –

+0

यहां सभी उत्तरों पर एक टिप्पणी:' "1" .equals (श्रेणियां कर्सर.जेटस्ट्रिंग (3)); बेहतर है 'श्रेणियों की तुलना में कर्सर .getString (3) .equals ("1")' क्योंकि NullPointerException के लिए कम अवसर है। –

+0

@DanielKaplan वाह।मुझे नहीं पता था कि आप ऐसा कुछ कर सकते हैं: डी –

उत्तर

38

यह false हर समय देता है क्योंकि आप संदर्भ, नहीं तार तुलना कर रहे हैं। आप शायद इस बजाय मतलब:, आप सुरक्षित बजाय यह कर किया जाएगा

boolean checked = categoriesCursor.getString(3).equals("1"); 

और मामले categoriesCursor.getString(3) में null हो सकता है::

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true 
       : false; 

कौन इस के बराबर होने का होता है

boolean checked = "1".equals(categoriesCursor.getString(3)); 
+0

आखिरी कथन क्या करता है? –

+3

@ हरशाएमवी: यह जांचता है कि कर्सर से प्राप्त _string_ के लिए '1 "' _equal_ है। –

+2

@ हरशाएमवी: जावा में स्ट्रिंग स्थिरांक हैं, और वे स्ट्रिंग ऑब्जेक्ट्स के रूप में व्यवहार करते हैं; 'स्ट्रिंग' कक्षा में उपलब्ध सभी विधियां 'स्ट्रिंग' स्थिरांक के लिए भी उपलब्ध हैं। – fge

3

==

के बजाय equals का उपयोग करें

categoriesCursor.getString(3).equals("1") 

दूसरे, आप त्रिगुट ऑपरेटर यहाँ की जरूरत नहीं है:

boolean checked = (categoriesCursor.getString(3).equals("1")); 
1

उपयोग categoriesCursor.getString(3).equals("1") बजाय ==

1

सबसे पहले, तार तुलना करने के लिए, आप equals विधि का उपयोग करना होगा। equals पहले से ही एक बूलियन में परिणाम है, तो बस इसे आवंटित:

boolean checked = categoriesCursor.getString(3).equals("1"); 
1

इस के बदले यह:

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true : false; 

== का प्रयोग न करें स्ट्रिंग सामग्री की तुलना।

नोट: == ऑपरेटर को ओवरराइड या जावा में संशोधित नहीं किया जा सकता है। यदि आप object1 == object2 का उपयोग कर रहे हैं, जहां object1 और object2 स्ट्रिंग्स या कोई अन्य ऑब्जेक्ट हैं, तो आप जांच करेंगे कि संदर्भ समान अंतर्निहित ऑब्जेक्ट को इंगित करते हैं या नहीं। यह सामग्री की तुलना नहीं करेगा।

3

इस

(categoriesCursor.getString(3).equals("1")) ? true : false; 
1

पहले वहाँ त्रिगुट ऑपरेटर की आवश्यकता नहीं है का उपयोग करें। फिर आपको == के बजाय equals() का उपयोग करना होगा। क्योंकि == ऑपरेटर जांचता है कि ऑब्जेक्ट्स के संदर्भ बराबर हैं या नहीं।

1

आप बराबर इग्नोरकेस() का भी उपयोग कर सकते हैं।

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