Comparar String com atributo de uma classe

No exemplo abaixo, estou tentando comparar a string autor com o atributo autor da classe Aux

Como eu faço isso?

while(autor != Aux.autor){
Aux = Aux.anterior;
    if(autor == Aux.autor){

String é um objeto e todos os objetos devem ser comparados usando o metodo equals(object).

Exemplo:

String primeira = "texto";
String segunda = "texto";
if(primeira.equals(segunda)) {
System.out.println("São iguais!");
} else {
System.out.println("Não são iguais!");
}

Quando você compara com == você está apenas comparando o endereço da memória.

Eu tinha feito assim e também não funcionou:

while(autor != Aux.autor){
Aux = Aux.anterior;
    if(Aux.autor.equals(autor)){

Retornou esse erro:
java.lang.NullPointerException

Há diferença entre comparar strings criadas na própria classe com strings provenientes de outra classe?

java.lang.NullPointerException é lançada sempre que você tenta invocar um metodo ou chamar um atributo de uma referencia nula.

No caso, acredito que o seu atributo autor da classe Aux esteja null.

Não.

Objetos (Object) não usam ‘==’ em comparação, mas sim equals.

Isso vale para todo e qualquer Objeto. Tendo isso em mente, tenho a absoluta certeza que sua primeira ação é alterar os “==” para equals.

Não. String é String e ponto final, a diferença está no modo como você acessa uma variável. Existe acesso via instância, estático, nível de pacotes e etc.
A questão é que você postou um pequeno trecho do seu código o que não nos garante o que pode ser o erro. Como o colega comentou, provavelmente o “Aux” ou o “autor” possuam referência nula, o que causa a exceção.

Qualquer coisa, poste sua classe completa.

Exatamente, deve ser comparado com método equals, deve-se ter cuidado com Strings, por exemplo, se executar o código desta maneira a saída dirá que são iguais:

final String primeira = "texto"; final String segunda = "texto"; if(primeira == segunda) { System.out.println("São iguais!"); } else { System.out.println("Não são iguais!"); }

Por que a JVM guarda no pool de Strings quando uma variável String é criada, para quando vc criar uma outra literal com o mesmo valor, a JVM utiliza o mesmo objeto ao invés de criar outro. Isto também acontece com tipos inteiros de 0 até 127, o código abaixo retorna que são iguais

final Integer b = 127; final Integer c = 127; if(b == c) { System.out.println("São iguais!"); } else { System.out.println("Não são iguais!"); }

já este com valor supeior a 127, retorna que são diferentes.

final Integer b = 128; final Integer c = 128; if(b == c) { System.out.println("São iguais!"); } else { System.out.println("Não são iguais!"); }

[quote=GilsnSilva]Eu tinha feito assim e também não funcionou:

while(autor != Aux.autor){
Aux = Aux.anterior;
    if(Aux.autor.equals(autor)){

Retornou esse erro:
java.lang.NullPointerException

Há diferença entre comparar strings criadas na própria classe com strings provenientes de outra classe?[/quote]

Isos também eé uma comparação…

while(autor != Aux.autor){

Antes de testar um objeto lembrese de testar se ele existe e se ele tem valor … Aux tem valor??
Inves de :

  if(Aux.autor.equals(autor)){

usa :

  if(Aux != null  && Aux.autor != null && Aux.autor.equals(autor)){

Espero ter ajudado…