o valor null e o valor “” são a mesma coisa para uma string?
de modo que os códigos abaixo são iguais
if (string == "")...
if (string == null)...
o valor null e o valor “” são a mesma coisa para uma string?
de modo que os códigos abaixo são iguais
if (string == "")...
if (string == null)...
nao, nao sao a mesma coisa…
string == ""
significa q a string tem o conteudo “”, ou seja, conteudo em branco…
string == null
significa q a string eh nula, nao tem valor algum…se tentar usar essa string com esse valor, vai ter um NullPointerException…
ficou claro?
E mais uma coisa, quando for comparar Strings, não utilize o operador ‘==’, mas sim o método equals.
string1.equals( string2 );
A explicação você encontra aqui:
http://www.guj.com.br/java.artigo.103.2.guj
Por que o Java tem String e StringBuffer??
Por que não colocar a funcionalidade da StringBuffer (pelo que vi StringBuffer é mais rápida que String) direto na sintaxe de concatenação, de modo a não precisar existir mais o tipo StringBuffer?
Assim, o código
for(i=1;i<100;i++)
string += "genocyber";
Teria a funcionalidade de um StringBuffer atual e não chamaria 99 “new” para cada concatenação.
O que acham?
Se vc estourar o espaco da StringBuffer inicialmente definido, uma nova SB será instanciada…

Se vc estourar o espaco da StringBuffer inicialmente definido, uma nova SB será instanciada…:P
Na verdade nao. Internamente, StringBuffer mantem um array de Strings para guardar os valores inseridos. Quando voce estourar o limite de posicoes, uma chamada a expandCapacity() sera feita, criando um novo array com o dobro da capacidade atual e entao copia os valores novos ( usando System.arraycopy() ) para o array da instancia.
Rafael
Pessoal, esse lance de como funciona as Strings em Java é muito hard core.
Mas [color=blue]insisto[/color], se StringBuffer é tão power-rápido, [color=blue]por que não transformar seu mecanismo no padrão[/color], fazendo as Strings normais terem seu comportamento ultra-power?
Por que complicar? Eu não quero saber o funcionamento interno da JVM e suas doideiras com Strings, eu apenas quero usá-las e quero que sejam o mais eficiente possível. É meio difícil pra mim engolir isso…
Os compiladores ja fazem isso para voce sempre que podem, mas em “codigo dinamico” vc fica responsavel por tal acao.
De uma olhada em http://www.churchillobjects.com/c/11027b.html
No .NET Strings tambem sao imutaveis.
Rafael
Não podemos esqueçer também que StringBuffer é sincronizado!Quando não for necessário utilizar sincronização(a maioria das aplicações!!!), podemos usar o StringBuilder do Tiger, que é muito mais rápido.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html