Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida sobre equals e ==

Já sei que o método equals() e o operador == são diferentes: o primeiro compara de acordo com a implementação que o programador deu (no caso desse exercício, o valor do nome do cookie) e o == vê se é o mesmo objeto.

private Cookie getUsuario(HttpServletRequest req) {
        Cookie[] cookies = req.getCookies();
        if (cookies == null) {
            return null;
        }
        String nomeDoCookie = "usuario.logado";
        for (Cookie cookie : cookies) {
            if (nomeDoCookie == cookie.getName()) {
                return cookie;
            }
        }
        return null;
    }

Por isso que não está entrando no if dentro do for. Mas, minha dúvida é a seguinte: criei uma classe em Java que compara duas Strings de mesmo valor e imprime na tela se elas são iguais ou não. A primeira String foi declarada no método main, a segunda é resultado do retorno de um método chamado dentro do main, de forma similar ao que foi feito no método getUsuario que coloquei. Comparei usando o operador ==. E teve o resultado esperado: o programa imprime uma mensagem dizendo que as Strings são iguais.

public class TesteStrings {
    private String teste() {
        return "Oi";
    }

    public static void main(String[] args) {
        String s1 = "Oi";
        TesteStrings s2 = new TesteStrings();

        if (s1 == s2.teste()) {
            System.out.println("Strings iguais");
        }
        else {
            System.out.println("Strings diferentes");
        }
    }
}

Fiquei sem entender o porque de ter funcionado nessa classe e não no método getUsuario. Gostaria que alguém esclarecesse minha dúvida.

2 respostas
solução!

Para Strings o java tem um comportamento diferente. Se você passa a String a partir de "" ele procura na memória (cache)para ver se existe alguma com esse valor. Porém se você criasse uma nova string com new String veria que eles são diferentes.

O ideal é sempre usar o equals, o == vai funcionar em alguns casos em que a string comparada esteja no cache de memória do java.

Ola Euclides!

Ainda com dúvida ?

Caso contrario poderia encerrar esse forum, por gentileza?

Obrigado!