String == "" X String == null X String.isEmpty()

Pessoal,

Estava fazendo um código que trabalhava de um certo modo se a String fosse vazia.
Para isso, fiz o seguinte:

if(palavra == "")

Mas não funcionava de modo algum.
Fiz então o seguinte:

if(palavra == null)

Também não funcionou, mas isso funcionou:

if(palavra.isEmpty())

Gostaria de entender o motivo do problema e a diferença entre esses três métodos.
Além disso, li também aqui no fórum um amigo explicando sobre a diferença entre
== e equals, mas no caso de objetos. E entendi a explicação a respeito do ‘pool’
de Strings do Java, mas e no caso de uma constante?
Por exemplo:

Existe diferença entre palavra.equals(null) e palavra == null ?
e entre palavra.equals("") e palavra == "" ?

1 curtida

http://javafree.uol.com.br/artigo/3932/Comparar-variaveis-==-ou-equals.html

Obrigado.

Realmente ajudou bastante, mas ainda estou sem a resposta
da primeira pergunta, a respeito do isEmpty().

[quote=l.frias]Obrigado.

Realmente ajudou bastante, mas ainda estou sem a resposta
da primeira pergunta, a respeito do isEmpty().[/quote]

String teste = ""; System.out.println(teste.isEmpty()); System.out.println(teste.equals(""));

é a mesma coisa.

string.isEmpty() é só um atalho para string.length() == 0

Me desculpem reabrir o tópico depois de tanto tempo, mas não intendi uma coisa, eu vi que o método isEmpty é boolean, ou seja, ele retorna 1, se o objeto está vazio e 0 se ele não está vazio?

Exatamente. Como o bruno falou é o mesmo que testar se string.length() == 0.

No caso de Java, true se está vazio, false se nao

Só mais um detalhe para completar o post…

não deixe de verificar se variável é null antes de usar o isEmpty().

if (string == null || string.isEmpty())

É esse método surgiu somente no java 6 (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#isEmpty%28%29)

Post corrigido…

Abraço!

Reabrir um post para dar uma informação errada?

O método isEmpty da classe String apenas olha para o tamanho da String e não verifica se é null ou não. Alias, invocar isEmpty numa String nula dá NullPointerException.

Provavelmente estás a confundir este método com o método isEmpty de alguma classe StringUtils.