Concatenação de cordas: concat() vs "+" operador

Assumindo String a e b:

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

Debaixo do capô, eles são a mesma coisa?

Aqui é concatinado descompilado como referência. I'gostaria de ser capaz de descompilar o operador + também para ver o que isso faz.

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 está correto, mas também vale a pena notar que o especial + operador pode ser convertido em algo mais eficiente pelo compilador Java. Java tem uma classe StringBuilder que representa uma String mutável e não segura para threads. Ao executar um monte de concatenações String, o compilador Java converte silenciosamente

String a = b + c + d;

para

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

o que, para grandes cordas, é significativamente mais eficiente. Tanto quanto sei, isto não acontece quando se usa o método concat.

No entanto, o método concat é mais eficiente ao concatenar um String vazio em um String existente. Neste caso, a JVM não precisa criar um novo objeto String e pode simplesmente retornar o já existente. Veja a documentação concat para confirmar isto.

Portanto, se você'está super preocupado com a eficiência, então você deve usar o método de concatenação ao concatenar Strings possivelmente vazios, e usar + caso contrário. No entanto, a diferença de desempenho deve ser insignificante e você provavelmente não deve'nunca se preocupar com isso.

Comentários (3)

O operador **+*** pode trabalhar entre uma string e uma string, char, inteiro, duplo ou valor do tipo de dados flutuante. Ele apenas converte o valor para sua representação de string antes da concatenação.

O concat operador só pode ser feito em e com cordas. Ele verifica a compatibilidade do tipo de dados e lança um erro, se eles não't combinam.

Excepto isto, o código que forneceu faz as mesmas coisas.

Comentários (0)

Acho que não... 39; acho que não.

a.concat(b)é implementado em String e eu acho que a implementação não'não mudou muito desde as primeiras máquinas java. A implementação da operação+depende da versão Java e do compilador. Atualmente o+`é implementado utilizando [StringBuffer][1] para tornar a operação o mais rápida possível. Talvez no futuro, isto mude. Em versões anteriores da operação java+` em Strings era muito mais lenta, pois produzia resultados intermediários.

Acho que += é implementado utilizando + e otimizado de forma similar.

Comentários (2)