2016-04-02 40 views
17

Ad esempio nel codice sottostante a e b e c sono uguali..length() vs .getText(). Length() vs .getText(). ToString(). Length()

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(); 

Qual è la differenza tra length() e getText().length() e getText().toString().length()?

risposta

20

.length() e getText().length() sono identici in their current implementation.

.getText().toString().length() convertirà il CharSequence in un normale String, quindi calcolerà la sua lunghezza. Mi aspetto che restituisca lo stesso valore degli altri due in molti casi. Tuttavia, se lo CharSequence è qualcosa di simile a SpannedString, non è possibile escludere la possibilità che esista un tipo di intervallo di formattazione (ad es., ImageSpan) che influisce sui calcoli della lunghezza.

6

È una questione di prestazioni. length farà esattamente la stessa cosa di getText e length ma ti evita semplicemente di digitare getText(). Dalla classe TextView che EditText estende:

public CharSequence getText() { 
    return mText; 
} 

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

Per quanto riguarda toString, è lo stesso, però, alcuna conversione si effettua (CharSequence =>String) vi costerà un po 'piccolo in termini di prestazioni (così poco probabilmente vi non notarlo).

Inoltre, quando si convertono elementi, è necessario prestare attenzione alle eccezioni del puntatore nullo, forse non in questo caso, ma in generale.

Per rispondere alla domanda, basta usare la lunghezza()

+0

Punte molto piccole aggiungere fino a intervalli di tempo pantagruelici. Se questo fosse fatto in dati che dovevano ancora essere presentati (diciamo in un thread di background worker) per migliaia di volte, produrre inutilmente stringhe e lasciarle al GC è un'idea molto sciocca.Volevo solo chiarire che sebbene una singola conversione sia OK su qualsiasi piattaforma (per questa quantità di caratteri), se ne esegui troppi ci vorrà del tempo. –

+0

Sei assolutamente corretto mafagafogigante, questo di solito non è il caso. tuttavia, la pratica migliore impone che non convertiamo quando non è necessario. – TacoEater

5
  1. length(): - length() funzione è un metodo ereditato per EditView che sta ottenendo ereditato da TextView che restituisce la lunghezza, in caratteri, del testo gestito di questo EditView. Quindi, restituirà la lunghezza del testo che l'utente inserisce nel Contorl EditView.

  2. getText().length(): - qui in questa dichiarazione la funzione length() non appartiene alla classe EditView. In realtà, la funzione length() appartiene alla classe CharSequence perché restituisce un oggetto CharSequence. Quindi, di nuovo questa funzione length() restituirà il numero di caratteri in questa sequenza.

  3. .getText().toString().length(): - qui metodo toString() Convertire l'oggetto CharSequence in un oggetto String semplice e immutabile. Quindi, qui length() funzione appartiene alla classe String che restituiscono anche la lunghezza dell'oggetto String
+0

Si prega di rimuovere tutti i tuoi bizzarria maiuscola di quasi ogni parola. – EJP

+0

come potete vedere dal codice nelle mie risposte tratte dalla fonte di EditText, 1 e 2 sono identici poiché entrambi usano la lunghezza di CharSequence. non importa da chi ereditano ma quale lunghezza dell'oggetto viene chiamata. – TacoEater