Ué, mas o construtor StringBuilder(2) é um cujo argumento é um inteiro, e não uma charSequence. Ou seja, StringBuilder(“2”) faria a inserção do caractere ‘2’ na string, enquanto StringBuilder(2) cria um objeto StringBuilder com capacidade para 2 caracteres.
StringBuilder()//Constructs a string builder with no characters in it and an initial capacity of 16 characters. StringBuilder(CharSequenceseq)//Constructs a string builder that contains the same characters as the specified CharSequence. StringBuilder(intcapacity)//Constructs a string builder with no characters in it and an initial capacity specified by the capacity argument. StringBuilder(Stringstr)//Constructs a string builder initialized to the contents of the specified string.
Parece que o método equals da classe StringBuilder não dá override no método equals da classe Object. Trecho do javadoc do J2SE 1.5:
Entom, acho que dentro do seu código, sb.equals(sb) deve retornar true.
Inté.
Felipe_de_Menes_e_Mo
Tomei a liberdade de comentar seu código, com fins pedagógicos! Hehehe! Acredito que tenha ficado mais fácil de seguir o raciocínio.
camilolopes:
e oque me diz desse:
publicclassSbEnca{publicstaticvoidmain(String[]args){//Observe que apenas um objeto é criado: "sb"StringBuildersb=newStringBuilder();sb.append("camilo");//sb.reverse() inverte a ordem dos caracteres no objeto "sb"//insert(2,"&") insere o caractere "&" no lugar do segundo caractere de "olimac" resultando em "o&imac"StringBuildersa=sb.reverse().insert(2,"&");//imprime "o&imac"System.out.println(sa);//adiciona ao fim da string o caractere 8, resultando em o&imac8sa.append(8);System.out.println(sa.toString());StringBuildera=null;System.out.println(a);}}
maquiavelbona
Opa! Tentei responder mais cedo, mas não pude.
StringBuilder ( e seu correspondente StringBuffer ) não implementam Comparable . String implementa essa interface que determina um método (compareTo) para comparação de objetos ( nesse caso, lexicograficamente ) e faz uma reescrita no método equals para comparar o conteúdo dos objetos.
StringBuilder e StringBuffer não reescrevem o método equals e comparam o objeto por completo. Se quiser comparar conteúdo, terá que fazer manualmente.
Até!
LPJava
como?eh isso que queria saber…
maquiavelbona
Ah cara, nem é tão complicado se você olhar o Javadoc. Fiz uma implementação de teste que nem me preocupei em fazer melhor. Segue abaixo:
packageorg.laissez_passer.utils.test;publicclassTesteCompare{/** * * @author Marcos Iriarte * @date 28/02/2007 01:33:25 GMT-3h * */privatestaticfinalintCAPACIDADE_PADRAO=16;publicstaticvoidmain(String[]args){StringBuilderstr1=newStringBuilder("builder");StringBuilderstr2=newStringBuilder("builder");StringBuilderstr3=newStringBuilder("build");booleanresultado=compareStringBuilders(str1,str2);System.out.println("O primeiro teste é: "+resultado);// builder == builderresultado=compareStringBuilders(str1,str3);System.out.println("O segundo teste é: "+resultado);// builder != buildSystem.out.println("Fim!");}// compara dois StringBuilder por cada caracterpublicstaticbooleancompareStringBuilders(StringBuilderbuilder1,StringBuilderbuilder2){// pega os tamanhos dos valoresinttamanho1=builder1.length();inttamanho2=builder2.length();// nao serao iguais de tamanhos diferentes! duh...if(tamanho1==tamanho2){// inicializa os array de char de trabalho com o valor do objeto// mais o valor do padrao da implementacaochar[]charIn1=newchar[tamanho1+CAPACIDADE_PADRAO];char[]charIn2=newchar[tamanho2+CAPACIDADE_PADRAO];// coloca os valores dentro dos arrays de charbuilder1.getChars(0,builder1.length(),charIn1,0);builder2.getChars(0,builder2.length(),charIn2,0);intcontador=tamanho1;// verifica char a char se diferem os valoresfor(intloop=0;loop<contador;loop++){if(charIn1[loop]!=charIn2[loop]){returnfalse;}}// se nao houver nenhum discrepante, retorna verdadeiroreturntrue;// se os tamanhos forem diferentes, retorna falso}else{returnfalse;}}}
Até!
bebad
E se eu quizer, pegar um valor por exemplo assim:
publicvoidCalculaData(){Calendarcal=Calendar.getInstance();intano=printf("1$tY",cal);sout("ano = "+ano);// fazer coisas com minha variavel ano;}
entenderam oque eu quero fzer ? tem como ?
vlw
P
pardal_nb
Felipe de Menes e Morais:
Ué, mas o construtor StringBuilder(2) é um cujo argumento é um inteiro, e não uma charSequence. Ou seja, StringBuilder(“2”) faria a inserção do caractere ‘2’ na string, enquanto StringBuilder(2) cria um objeto StringBuilder com capacidade para 2 caracteres.
StringBuilder()//Constructs a string builder with no characters in it and an initial capacity of 16 characters. StringBuilder(CharSequenceseq)//Constructs a string builder that contains the same characters as the specified CharSequence. StringBuilder(intcapacity)//Constructs a string builder with no characters in it and an initial capacity specified by the capacity argument. StringBuilder(Stringstr)//Constructs a string builder initialized to the contents of the specified string.
Logo a Saída deveria ser:
Ru
camilo lopespulga
Estranho, o resultado aki na minha maquina foi:
Rumo
camilo lopespulga
deveria ser Ru ?
danielbussade
Olá a saída correta eh essa mesma:
Rumo
camilo lopespulga
Ru, deve ter sido um erro de digitação!
Att
P
pardal_nb
Felipe de Menes e Morais:
Ué, mas o construtor StringBuilder(2) é um cujo argumento é um inteiro, e não uma charSequence. Ou seja, StringBuilder(“2”) faria a inserção do caractere ‘2’ na string, enquanto StringBuilder(2) cria um objeto StringBuilder com capacidade para 2 caracteres.
StringBuilder()//Constructs a string builder with no characters in it and an initial capacity of 16 characters. StringBuilder(CharSequenceseq)//Constructs a string builder that contains the same characters as the specified CharSequence. StringBuilder(intcapacity)//Constructs a string builder with no characters in it and an initial capacity specified by the capacity argument. StringBuilder(Stringstr)//Constructs a string builder initialized to the contents of the specified string.
Logo a Saída deveria ser:
Ru
camilo lopespulga
Fiquei encucado foi com esse "# StringBuilder(int capacity) //Constructs a string builder with no characters in it and an initial capacity specified by the capacity argument. "
O que acontece com essa tal “capacidade inicial”?
Marky.Vasconcelos
Se o append ultrapassar a capacidade inicial essa String é destruida e criada outra maior no lugar.
Isso acontece cada vez que o limite é “estourado”
P
pardal_nb
Mark_Ameba:
Se o append ultrapassar a capacidade inicial essa String é destruida e criada outra maior no lugar.
Isso acontece cada vez que o limite é “estourado”
entao essa capacidade “nao serve pra nada” usa-la ne?
T
thingol
pardal_nb:
Mark_Ameba:
Se o append ultrapassar a capacidade inicial essa String é destruida e criada outra maior no lugar.
Isso acontece cada vez que o limite é “estourado”
entao essa capacidade “nao serve pra nada” usa-la ne?
A capacidade é só uma otimização.
Se você souber de antemão, ou for rápido calcular, o tamanho da string resultante, o seu código roda mais rápido porque você evita uma alocação de objetos (que costuma ser rápida) e uma cópia de caracteres (que é lenta).
Por exemplo, se você for escrever uma função que concatena duas strings, você pode criar uma StringBuffer ou StringBuilder já com a capacidade certa (que é a soma dos comprimentos das duas strings).
Metaleiro
[color=darkblue] Apenas para ressaltar talvez não seja o foco da discussão, mas existem diferenças entre StringBuilder e StringBuffer:
[/color]
O mais fácil para compara e duas Strings contidas no StringBuilder/StringBuffer é chamando o toString() delas.
Ex:
StringBuildersb1=newStringBuilder("teste");StringBuildersb2=newStringBuilder("teste");if(sb1.toString().equals(sb2.toString())){System.out.println("São iguais.");}else{System.out.println("Não são iguais.");}