Pela junção com o operador mais +
...String x = stringY+stringZ;
...
Exemplo:
public static void main(String args[]) {
String texto = "Teste 01";
for(int i=0;i<10000 br="" i=""> {
texto=texto+" Teste "+i;
}
}10000>
Pelo método concat da própria classe String
String x = stringY.concat(stringZ);
Exemplo:
public static void main(String args[]) {
String texto = "Teste 01";
for(int i=0;i<10000 br="" i=""> {
texto=texto.concat(" Teste "+i);
}
}10000>
Ambas maneiras são validas, porém quando é necessário juntar uma grande quantidade de Strings essas maneiras se tornam defasadas. Para tiramos melhor aproveito uma ótima saída é utilizar a classe StringBuilder.
Sintaxe:
StringBuilder nome = new StringBuilder();
nome.append(string);
Onde:
nome.append(String); - Método para concatenação da string.
Exemplo:
public static void main(String args[]) {
StringBuilder texto=new StringBuilder();
for(int i=0;i<10000 br="" i=""> {
texto.append("Teste "+i);
}
}10000>
Comparativo
Abaixo é possível ver uma classe que faz a comparação entre os tipos de concatenação acima.
public class Teste {
public static void main(String args[]) {
String texto = "Teste 01";
long inicio = System.nanoTime();
long diferenca;
//**********************************************
for(int i=0;i<10000 br="" i=""> {
texto = texto+"Teste "+i;
}
diferenca = System.nanoTime()-inicio;
System.out.printf("\n\nCom soma +");
System.out.printf("\nTempo: %d ns",(diferenca));
System.out.printf("\nTamano: %d ns",texto.length());
inicio = System.nanoTime();
texto="";
//**********************************************
for(int i=0;i<10000 br="" i=""> {
texto = texto.concat("Teste "+i);
}
diferenca = System.nanoTime()-inicio;
System.out.printf("\n\nCom concat");
System.out.printf("\nTempo: %d ns",(diferenca));
System.out.printf("\nTamano: %d ns",texto.length());
//**********************************************
StringBuilder texto2=new StringBuilder();
inicio = System.nanoTime();
for(int i=0;i<10000 br="" i=""> {
texto2.append("Teste "+i);
}
diferenca = System.nanoTime()-inicio;
System.out.printf("\n\nCom StringBuilder");
System.out.printf("\nTempo: %d ns",(diferenca));
System.out.printf("\nTamano: %d ns",texto2.toString().length());
}
}10000>10000>10000>
Saída:
Com soma +
Tempo: 293225120 ns
Tamano: 98898 ns
Com concat
Tempo: 23470066971 ns
Tamano: 98890 ns
Com StringBuilder
Tempo: 4156625 ns
Tamano: 98890 ns
Como foi possível ver o método com StringBuilder é muito mais rápido do que as outras maneiras.