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.