Povezovanje nizov: concat() proti operatorju "+"

Ob predpostavki, da sta niz a in b:

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

Ali sta pod pokrovom enaka?

Tukaj je concat razčlenjen kot referenca. Želel bi, da bi lahko dekompiliral tudi operator +, da bi videl, kaj počne.

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

Niyaz ima prav, vendar je vredno omeniti, da lahko prevajalnik Java posebni operator + pretvori v nekaj bolj učinkovitega. Java ima razred StringBuilder, ki predstavlja spremenljiv niz, ki ni varen pred vlakni. Ko izvajamo več povezav nizov, prevajalnik Java tiho pretvori

String a = b + c + d;

v

String a = new StringBuilder(b).append(c).append(d).toString();

kar je za velike nize bistveno bolj učinkovito. Kolikor vem, se to ne zgodi pri uporabi metode concat.

Vendar pa je metoda concat učinkovitejša pri povezovanju praznega niza na obstoječi niz. V tem primeru mehanizmu JVM ni treba ustvariti novega objekta String in lahko preprosto vrne obstoječega. Za potrditev tega glejte dokumentacijo concat.

Če vam je torej zelo pomembna učinkovitost, potem morate pri povezovanju morebitnih praznih nizov uporabiti metodo concat, v nasprotnem primeru pa uporabite +. Vendar bi morala biti razlika v učinkovitosti zanemarljiva, zato vas to verjetno ne bi smelo skrbeti.

Komentarji (3)

Operator + lahko deluje med nizom in vrednostjo podatkovne vrste string, char, integer, double ali float. Vrednost pred združevanjem pretvori v njeno znakovno predstavitev.

Operator concat se lahko uporablja samo za nize in z njimi. Preveri združljivost podatkovnih tipov in vrže napako, če se ne ujemajo.

Razen tega koda, ki ste jo navedli, počne enako.

Komentarji (0)

Mislim, da ne.

a.concat(b) je implementiran v Stringu in mislim, da se implementacija ni veliko spremenila od zgodnjih java strojev. Implementacija operacije + je odvisna od različice jave in prevajalnika. Trenutno se + izvaja z uporabo StringBuffer, da bi bila operacija čim hitrejša. Morda se bo v prihodnosti to spremenilo. V prejšnjih različicah jave je bila operacija + na nizih veliko počasnejša, saj je ustvarjala vmesne rezultate.

Predvidevam, da je += implementirano z uporabo + in podobno optimizirano.

Komentarji (2)