Pessoal,
Para concatenar String o Java cria um novo objeto com o valor antigo + o valor novo. certo? Com o StringBuffer é feito a mesma coisa?
Grato pela atenção
Pessoal,
Para concatenar String o Java cria um novo objeto com o valor antigo + o valor novo. certo? Com o StringBuffer é feito a mesma coisa?
Grato pela atenção
Cara olha aqui o método sobrecarregado append() que tá na documentação
// Documentation in subclasses because of synchro difference
public AbstractStringBuilder append(StringBuffer sb) {
if (sb == null)
return append("null");
int len = sb.length();
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
sb.getChars(0, len, value, count);
count = newCount;
return this;
}
vei ai ehehehe!!è bem legal!!
Não de tou 100% de certeza mas como é recomendado usar o StringBuffer quando necessário concatenar vários Strings, eu acho que ele deve se comportar da mesma forma que um linkedList. Nodo aponta para nodo que aponta para nodo…
Ex.: Nodo “I” aponta para nodo “V” que aponta para nodo “O”, temos ai Ivo, se fosse necessário concatenar mais um caracter bastava o java criar ele na memória e o nodo “O” iria apontar para ele.
Talvez eu tenha falado muita besteira…
Quando um StringBuffer chama o append ele chama esse método
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
if (len == 0) return this;
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
str.getChars(0, len, value, count);
count = newCount;
return this;
}
Da uma olhada no source do java que voce ve isso.
Em 99% das vezes é melhor esquecer StringBuffer e usar StringBuilder no lugar.
nao é a mesma coisa…
String vc tem objetos perdidos
StringXXXX = ele trabalha em cima dos objetos evitando criar objetos perdidos na memoria…
import static java.lang.System.out;
public class Mult {
public static void main(String[] args) {
String s="scjp";
s.concat("neto");//objeto criado porem perdido sem referencia
System.out.println(" " +s);
}}
Usando a StringBuilder/Buffer
public class Builder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("cavalo");
sb.append("preto");
System.out.println(sb);
}
/* imprime cavalo preto*/
//vc ver algum objeto perdido?
}
Use a StringBuilder pois ela é mais rapida que Buffer devido a Builder nao ter metodos sincronizados…
Ela está disponivel a partir da versao 1.5. Agora as duas classes tem agem da mesma fora, porem com essa diferença que falei acima
flw! :lol:
cara StringBuffer tem um peso a ser considerado… então use StringBuilder que será mais rápido…