2016-04-02 9 views
17

उदाहरण के लिए a और b और c के नीचे दिए गए कोड में बराबर हैं।। लम्बाई() बनाम .getText() लंबाई() बनाम .getText()। ToString() लंबाई()

EditText editText; 
editText = (EditText) findViewById(R.id.edttxt); 

editText.setText("1234"); 

int a, b, c; 
a = editText.length(); 
b = editText.getText().length(); 
c = editText.getText().toString().length(); 

length() और getText().length() और getText().toString().length() के बीच क्या अंतर है?

उत्तर

20

.length() और getText().length()their current implementation में समान हैं।

.getText().toString().length()CharSequence को सादे String में परिवर्तित करेगा, फिर इसकी लंबाई की गणना करें। मैं उम्मीद करता हूं कि कई मामलों में अन्य दो के समान मूल्य लौटाएंगे। हालांकि, अगर CharSequence एक SpannedString की तरह कुछ है, मुझे पता संभावना शासन नहीं कर सकता वहाँ लंबाई गणना प्रभावित करता है अवधि (जैसे, ImageSpan) स्वरूपण के कुछ प्रकार है कि।

6

यह प्रदर्शन की बात है। ठीक उसी getText के रूप में और length यह सिर्फ getText() टाइपिंग से बचाता है length करेंगे। वर्ग TextView जो EditText फैली से:

public CharSequence getText() { 
    return mText; 
} 

/** 
* Returns the length, in characters, of the text managed by this TextView 
*/ 
public int length() { 
    return mText.length(); 
} 

toString के रूप में, यह एक ही है, फिर भी, किसी भी रूपांतरण आप कर (CharSequence =>String) आप प्रदर्शन में एक छोटा सा (खर्च होंगे इतने कम आप शायद हूँ ध्यान नहीं दिया)।

इसके अलावा

, जब आप सामान कन्वर्ट आप इस उदाहरण में शायद नहीं, लेकिन आम तौर पर नल पॉइंटर अपवाद के लिए बाहर देखने के लिए, है।

लंबाई() सवाल का जवाब के लिए, बस का उपयोग

+0

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

+0

आप बिल्कुल सही माफगाफोगिगेंटे हैं, यह आमतौर पर मामला नहीं है। हालांकि, सर्वोत्तम अभ्यास यह निर्देश देता है कि जब आवश्यक नहीं है तो हम परिवर्तित नहीं होते हैं। – TacoEater

5
  1. length(): - length() समारोह EditView के लिए एक विरासत तरीका है जो TextView कि लंबाई देता है, वर्णों में, पाठ कामयाब के द्वारा विरासत में मिली हो रही है है इस EditView द्वारा। इसलिए, यह पाठ की लंबाई वापस कर देगा जो उपयोगकर्ता EditView कंटोरल में डालता है।

  2. getText().length(): - इस कथन में length() फ़ंक्शन EditView कक्षा से संबंधित नहीं है। वास्तविक में इस length() समारोह CharSequence वर्ग के हैं क्योंकि getText() एक CharSequence वस्तु लौटने। तो, इस अनुक्रम में फिर से यह कार्य length()वर्ण की संख्या वापस करेगा।

  3. .getText().toString().length(): - यहाँ toString() विधि एक सादे अपरिवर्तनीय String वस्तु में कन्वर्ट CharSequence वस्तु। तो, यहाँ length() समारोह String वर्ग जो भी String वस्तु
+0

कृपया लगभग हर शब्द के अपने सभी विचित्र पूंजीकरण को हटा दें। – EJP

+0

जैसा कि आप EditText, 1 और 2 के स्रोत से लिया गया मेरे उत्तरों में कोड से देख सकते हैं, वे दोनों समानता लंबाई का उपयोग करते हैं। इससे कोई फर्क नहीं पड़ता कि वे किसके उत्तराधिकारी हैं लेकिन किस वस्तु की लंबाई पर बुलाया जा रहा है। – TacoEater

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