Uma pergunta bem básica e objetiva, é possível comprar String utilizando == ? Sim. Da certo 100% das vezes? Não.
Uma das primeiras coisas que aprendi quando comecei a programar em java foi JAMAIS utilizar == para comprar Strings, mais porque isso? Vamos a uma explicação técnica.
String é um objeto, o metodo equals(Object) vai retornar true se ambas as Strings tiverem o mesmo objeto. O operador == só ira retornar true se ambas referencias de String apontarem para a mesma referencia do objeto.
Quando criamos uma String de forma literal é criado um pool de Strings, quando criamos uma outra String literal com o mesmo valor a JVM procura se ja existe uma String com esse mesmo valor no pool de Strings, caso exista, faz sua variável apontar para o mesmo endereço de memória. Por este motivo, quando você testa a igualdade das variáveis a e b através do "==", ela retorna true.
String a = "abc"; //pool de string
String b = "abc"; /*ja existe uma string com o mesmo conteúdo no pool,
vai para a mesma referencia na memória*/
String c = "dda"; //vai para uma nova referencia de memoria pois não existe no pool
Se você criar strings assim, você está criando um novo objeto em memória e se testar a igualdade das variáveis a e d com "==", ela retornará false, pois não apontam para o mesmo lugar na memória.
String d = new String("abc"); //Cria um novo objeto na memoria
String a = "abc";
String b = "abc";
String c = "dda";
String d = new String("abc");
a==b = true
a==c = false
a==d = false
a.equals(d) = true
muito bom!
ResponderExcluirOk, agora a=="abc" é true mas d=="abc" é false. Pq?
ResponderExcluirquando tu escreve "abc" tu ta criando uma string "anonima"... ou seja, é o mesmo caso de a="abc" e b="abc"
Excluireu criei essa comparação para login e senha porem quando digito um registro que nao existe no banco ele nao retorna o erro Login ou Senha inválidos podem me ajudar
ResponderExcluirif(txt_login.getText().equals("") || txt_senha.getText().equals("")){
JOptionPane.showMessageDialog(null, "Login ou Senha nao pode ser vazio.");
}else{
Conn conexao = new Conn();
conexao.getConn();
String sql = "Select login,senha from tab_login where login = '"+ txt_login.getText()+"';";
conexao.executeSql(sql);
ResultSet rs = conexao.resultset;
try {
while(rs.next()) {
String login = rs.getString("login");
String senha = rs.getString("senha");
if(txt_login.getText().equals(login) && txt_senha.getText().equals(senha)){
TelaPrincipal principal = new TelaPrincipal();
principal.setVisible(true);
dispose();
}else{
JOptionPane.showMessageDialog(null,"Login ou Senha inválidos.");
}
}
} catch (SQLException ex) {
Logger.getLogger(LoginSenha.class.getName()).log(Level.SEVERE, null, ex);
}
}
}