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.
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.
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.