Dilema de Strings pt III

E lá vai eu denovo, acho q vaum me mandar praquele lugar, akele mesmo, o google, mas…

Ae, eu sei q para “ajuntar” string dah pra fazer assim normal:

str1 = “a”;
str2 = “b”;
str3 = “c”;

[code]str1 = str1 + str3;
//e o jeito aconselhável:
str1 = str1.concat(str3);

[/code]

e como fica:

[code]str1 = str2 + str3;

str1 = str1.concat(str2) + str1.concat(str3); //Assim???

[/code]

e isso:

[code]str1 = str2 + str1;

str1 = str1.concat(str2) + str1.concat(str1);

[/code]

Quando você “soma” Strings, se não me engano 3 objetos são criados para fazer a concatenação.

Execute este teste simples:

public static void main( String args[] ) {
	long initTime = System.currentTimeMillis();
	String s = "a";
	for( int i = 0; i < 100000; i++ )
		s += "a";
	System.out.println( "Somando strings: " + ( System.currentTimeMillis() - initTime ) + "ms.");
		
	initTime = System.currentTimeMillis();
	String s2 = "a";
	for( int i = 0; i < 100000; i++ )
		s2.concat( "a" );
	System.out.println( "Usando concat() strings: " + ( System.currentTimeMillis() - initTime ) + "ms." );
}

}

Use StringBuffer (JDK 1.4) ou StringBuilder (5.0+) quando for concatenar uma String diversas vezes, como num loop, por exemplo. Em outros lugares, use o + mesmo.

E, so pra responder a pergunta, voce pode fazer s1.concat(s2).concat(s3), mas isso eh soh um jeito mais chato de escrever s1 + s2 + s3 :wink:

Resumindo, se for usar poucas “junções” de strings vai no mais(+) mesmo

senaum se atire no google e aprenda StringBuffer

cv, tem certeza que é mesma coisa cara? Roda o trexo que eu postei para ver a diferença.

Lógico que não é a mesma coisa, LIPE, porque seu código usando concat joga a concatenação fora toda vez enquanto que o primeiro realmente faz s “crescer”. :slight_smile:

Altere seu segundo for para:

  s2 = s2.concat("a");

e nos conte o que acontece :wink:

Neste tópico vale uma lida: http://java.sun.com/developer/JDCTechTips/2002/tt0305.html

e http://www.javapractices.com/Topic4.cjp

Sobre usar + pra pequenas concatenações ao invés de criar um StringBuffer isso é só pra simplicidade do código já que pra performance se você fizer direito dá no mesmo:

[quote=Concatenation and the + Operator]String cat = “cat”;
System.out.println(“con” + cat + “enation”);

The above example compiles to:

String cat = “cat”;
System.out.println(new StringBuffer().append(“con”).
append(cat).append(“enation”).toString());
[/quote]

Cuidado!
Em laços,

for (int i =0; i < 10000; i++) a+ = "s" 

o código fica assim

for (int i =0; i < 10000; i++) {
   sb = new StringBuffer(a);
   sb.append("s");
   a = sb.toString();   
}

e o ideal serial

sb = new StringBuffer(a);
for (int i =0; i < 10000; i++) {
   sb.append("s");
}
a = sb.toString();

E por favor, fora de laços, não seja “chato”: use o operador +

Oloco meu, valeu pela dica, isso é o q queria saber.

haha que anta eu :smiley: valeu

[quote=israelwm]E lá vai eu denovo, acho q vaum me mandar praquele lugar, akele mesmo, o google, mas…
[/quote]

Ou para outro ainda pior http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html

Leitura facil, tranquila e recreativa. Todas as suas dúvidas sobre String vão desaparecer… :lol:

[quote=louds][quote=israelwm]E lá vai eu denovo, acho q vaum me mandar praquele lugar, akele mesmo, o google, mas…
[/quote]

Ou para outro ainda pior http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html

Leitura facil, tranquila e recreativa. Todas as suas dúvidas sobre String vão desaparecer… :lol: [/quote]

huauhauhhuahua, naum tudo menos o site da sun, é um saco…