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.