String e null

8 respostas
renatosilva

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)...

8 Respostas

R

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?

_fs

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

renatosilva

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?

Lucas_Teixeira

Se vc estourar o espaco da StringBuffer inicialmente definido, uma nova SB será instanciada…

:stuck_out_tongue:

Rafael_Steil

Lucas Teixeira:
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

renatosilva

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…

Rafael_Steil

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

Ironlynx

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

Criado 22 de dezembro de 2004
Ultima resposta 23 de dez. de 2004
Respostas 8
Participantes 6