589 Stimmen

String-Verkettung: concat() vs. "+"-Operator

Angenommen, String a und b:

a += b
a = a.concat(b)

Sind sie unter der Haube dasselbe?

Hier ist concat als Referenz dekompiliert. Ich würde gerne die Dekompilierung der + Operator, um zu sehen, was das bewirkt.

public String concat(String s) {

    int i = s.length();
    if (i == 0) {
        return this;
    }
    else {
        char ac[] = new char[count + i];
        getChars(0, count, ac, 0);
        s.getChars(0, i, ac, count);
        return new String(0, count + i, ac);
    }
}

1voto

iamreza Punkte 57

Bei der Verwendung von + nimmt die Geschwindigkeit mit zunehmender Länge der Zeichenkette ab, aber bei der Verwendung von concat ist die Geschwindigkeit stabiler, und die beste Option ist die Verwendung der StringBuilder-Klasse, die eine stabile Geschwindigkeit hat, um das zu tun.

Ich denke, Sie können verstehen, warum. Aber der absolut beste Weg für die Erstellung von langen Strings ist mit StringBuilder() und append(), entweder Geschwindigkeit wird inakzeptabel sein.

0voto

Christian Meyer Punkte 515

なお s.concat("hello"); würde dazu führen, dass ein NullPointereException wenn s Null ist. In Java wird das Verhalten des +-Operators normalerweise durch den linken Operanden bestimmt:

System.out.println(3 + 'a'); //100

Strings sind jedoch eine Ausnahme. Wenn einer der beiden Operanden ein String ist, wird erwartet, dass das Ergebnis ein String ist. Dies ist der Grund, warum null in "null" umgewandelt wird, auch wenn man eine RuntimeException .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X