2016-04-02 15 views
17

Zum Beispiel im Code unter a und b und c sind gleich..length() vs .Text(). Length() vs .Text(). 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(); 

Was ist der Unterschied zwischen length() und getText().length() und getText().toString().length()?

Antwort

20

.length() und getText().length() sind identisch in their current implementation.

.getText().toString().length() wird die CharSequence in eine einfache String konvertieren, dann berechnen Sie ihre Länge. Ich würde erwarten, dass in vielen Fällen derselbe Wert wie die anderen beiden zurückgegeben wird. Wenn die CharSequence jedoch etwas wie eine SpannedString ist, kann ich nicht die Möglichkeit ausschließen, dass es irgendeine Art von Formatierungsspanne (z. B. ImageSpan) gibt, die Längenberechnungen beeinflusst.

6

Es ist eine Frage der Leistung. length wird genau das gleiche tun wie getText und length es nur speichert Sie von der Eingabe getText(). Von Klasse TextView die EditText erweitert:

public CharSequence getText() { 
    return mText; 
} 

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

Was toString, ist es das gleiche, jedoch jede Konvertierung Sie (CharSequence =>String) machen Sie ein kleines bisschen in der Leistung kosten (so wenig werden Sie wahrscheinlich merke es nicht).

Auch wenn Sie Sachen konvertieren, müssen Sie nach Null-Zeiger-Ausnahmen Ausschau halten, vielleicht nicht in diesem Fall, aber allgemein gesprochen.

die Frage zu beantworten, nur Länge verwenden()

+0

Tiny Bits addieren sich zu gigantischen Zeitscheiben. Wenn dies in Daten geschehen würde, die noch tausende Male präsentiert werden müssten (etwa in einem Hintergrund-Worker-Thread), wäre das eine unnötige Idee, unnötig Strings zu erzeugen und sie dem GC zu überlassen.Ich wollte nur klarstellen, dass, obwohl eine einzelne Konvertierung auf jeder Plattform in Ordnung ist (für diese Menge an Zeichen), wenn Sie zu viele von ihnen ausführen, es Zeit brauchen wird. –

+0

Sie sind absolut korrekt mafagafogigante, das ist in der Regel nicht der Fall. Best Practices schreiben jedoch vor, dass wir nicht konvertieren, wenn es nicht notwendig ist. – TacoEater

5
  1. length(): - length() Funktion ist eine vererbte Methode für EditView die von TextView vererbt bekommen, die die Länge zurückkehrt, in Zeichen des Textes verwaltet durch diese EditView. So wird die Länge des Textes zurückgegeben, den der Benutzer in die EditView Contorl eingegeben hat.

  2. getText().length(): - hier in dieser Aussage length() Funktion gehört nicht zu EditView Klasse. In der Tat gehören diese length() Funktion zu CharSequence Klasse, weil getText() ein CharSequence Objekt zurückgeben. Also, wieder diese Funktion length() wird die Anzahl der Zeichen in dieser Reihenfolge zurückgeben.

  3. .getText().toString().length(): - hier toString() Methode Konvertieren Sie das CharSequence Objekt in ein einfaches unveränderliches String Objekt. So, hier length() Funktion gehört zu String Klasse, die auch die Länge der String Objekt zurück
+0

Bitte entfernen Sie alle Ihre Bizarre Großschreibung von fast jedem Wort. – EJP

+0

Wie Sie aus dem Code in meinen Antworten aus der Quelle von EditText sehen können, sind 1 und 2 identisch, da beide CharSequence-Länge verwenden. Es spielt keine Rolle, von wem sie erben, sondern welche Objektlänge aufgerufen wird. – TacoEater