2010-04-24 12 views
14

प्रिंट करते हैं, मुझे एक समस्या है जिसके बारे में मैं उलझन में हूं। मैं अपने एंड्रॉयड आवेदन में कोड की निम्न पंक्तियाँ:एंड्रॉइड पर स्ट्रिंग्स जावा में समान नहीं लगते हैं, भले ही वे उसी

System.out.println(CurrentNode.getNodeName().toString()); 
if (CurrentNode.getNodeName().toString() == "start") { 
    System.out.println("Yes it does!"); 
} else { 
    System.out.println("No it doesnt"); 
} 

जब मैं पहली बार println बयान के उत्पादन को देखो यह (जाहिर है उद्धरण के बिना) "शुरू" के रूप में LogCat में दिखाई देता है। लेकिन फिर जब कथन का निष्पादन होता है तो यह अन्य कथन और प्रिंटों पर जाता है "नहीं, यह नहीं करता"।

मुझे आश्चर्य हुआ कि नोड के नाम में इसमें कुछ प्रकार का गैर-प्रिंटिंग चरित्र हो सकता है, इसलिए मैंने getNodeName() से आने वाली स्ट्रिंग की लंबाई की जांच की है और यह 5 वर्ण लंबा है, जैसा कि आप उम्मीद करेंगे ।

क्या किसी को यह पता चला है कि यहां क्या हो रहा है?

उत्तर

44

स्ट्रिंग्स की तुलना करने के लिए स्ट्रिंग की equals विधि का उपयोग करें। == ऑपरेटर केवल ऑब्जेक्ट संदर्भों की तुलना करेगा।

if (CurrentNode.getNodeName().toString().equals("start")) { 
    ... 
+0

'CurrentNode.getNodeName()। ToString() के परिणाम क्या होंगे। (" प्रारंभ करें ") ==" प्रारंभ करें ".equals (CurrentNode.getNodeName()। ToString()'? –

+0

@ मोहम्मदश्रीफसी I ' डी 'सत्य' की उम्मीद है, लेकिन आप इसका पता लगाने के लिए परीक्षण कर सकते हैं। –

+0

yup। बहुत आलसी होने के लिए खेद है। –

7

आप .equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... } 
13

उपयोग CurrentNode.getNodeName().toString().equals("start") उपयोग करने के लिए की जरूरत है।

जावा में, सबसे आम गलतियों में से एक नए आने वाले स्ट्रिंग्स की तुलना करने के लिए == का उपयोग कर रहा है। आपको याद रखना होगा, == ऑब्जेक्ट पहचान (मेमोरी पतों पर विचार करें) की तुलना करता है, सामग्री नहीं।

+0

इस स्पष्टीकरण के लिए बहुत बहुत धन्यवाद .. मैंने आश्चर्यजनक घंटे बर्बाद कर दिया कि क्यों बिल्ली == काम नहीं करता – imin