Comparacao de String com NULL

6 respostas
R

Fala galera…

ai vai uma duvidazinha q apareceu aqui…

posso comparar uma String com NULL desse jeito??

minhaString == null;

ou devo usar:

minhaString.equals("");

falow

6 Respostas

tiagops

Eu tambem tenho essa dúvida!
Afinal, qual a diferença entre as duas comparacões?
:?:

A

vc só pode usar == pois se vc usar equals vai compilar mas vai dar um erro em tempo de execução.

A

Quando vc atribui null a um objeto ele não faz referencia para nenhum lugar na memoria. e o equals ele é uma comparação profunda. por isso quando vc executa vai gerar a exeption nullpointer.

espero ter ajudado.

Bruno_Cardoso

A diferença é que o "==" compara referencias de objectos e o metodo .equals(String s) compara os conteudos das strings. Vejam o código abaixo:

import java.io.*;

public class StringCompare {
  public static void main(String[] args) {
    String s = null;

    System.out.println("Whatever" == new String("Whatever")); // false
    System.out.println("Whatever".equals(new String("Whatever"))); // true
    System.out.println(s == s); // true
    System.out.println(s == null); // true
    s = new String();
    System.out.println(s == null); // false
    System.out.println("".equals("")); // true
  }
}

Por isso voçê usa um ou o outro dependendo se quer comparar conteúdos ou referencias 8)

PEACE!

C

Depende do seu objetivo!

Se você quer descobrir se a variável aponta para algum objeto, pode utilizar ==.
Agora, olhe o código abaixo:

String a = "a";
String b = "a";
String c = new String("a");

(a == b) // true
(b == c) // FALSE
a.equals(c) // true

A JVM possui um repositório de Strings, onde são armazenadas as Strings criadas com a declaração acima (a e b). Quando declaramos a String a e atribuimos o valor “a”, a JVM cria uma String com o valor “a” neste repositório, no entanto, ao criar a String b e associar o valor “a”, a JVM não irá criar uma nova String, mas sim utilizar MESMA string no repositorio… ou seja, o teste (a == b) não resulta em true porque as strings são iguais, mas porque as variáveis apontam para a mesma String!

Por isos que, ao utilizar explicitamente o operador new… um novo objeto com o valor “a” é criado, independente de existir uma string igual no repositorio. Por isso que (b == c) resulta em false, eles apontam para objetos diferentes!

Já o método equals compara os valores de cada String, por isso… é sempre indicado o uso do método equals, que funciona em qualquer caso.

tiagops

Ótima resposta! Acabou com a minha dúvida!

Obrigado!

Criado 5 de fevereiro de 2003
Ultima resposta 5 de fev. de 2003
Respostas 6
Participantes 5