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){
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…