Error al comparar 2 variable de tipo string
String clave="pep0001";
String c1= getJTextPasswodr().getText().toString();
if(c1==clave){
System.out.println("Acceso correcto");
}else{
System.out.println("Acceso denegado");
}
//al meter la contraseña la condición no me esta funcionando, yo meto como password pep001
Se aceptan mil sugerencias de cual es mi error
- Inicie sesión o regístrese para enviar comentarios
equals
Esto es de lo más básico de Java. El operador == compara referencias, es decir solamente da
si ambas variables apuntan al mismo objeto. Si quieres comparar dos objetos distintos para ver si son iguales, necesitas usar el método equals en alguno de los dos. En el caso de las cadenas, invocas equals con cualquiera de las dos y le pasas la otra como parámetro (y checas que no sea null).
Cuando tienes una cadena constante contra la que quieres comparar una variable tipo String, lo recomendable es hacer esto:
Si vienes de .NET, lo que pasa es que en C# hay sobrecarga de operadores. La clase System.String redefine el operador == para que invoque el método Equals. En Java no hay sobrecarga de operadores, por lo que el == SIEMPRE es para comparación de referencias. En el caso de cadenas, solamente esto funciona con ==:
usa el metodo Equals
No compares dos Strings con == ya que NO son el mismo objeto, tienen el mismo valor, pero son objetos diferentes...
En C# tambien es recomendable usar Equals
por la misma razón, la verdad es que nunca he hecho la prueba sobre la sobrecarga del == pero efectivemente hay veces que me gustaría que Java pudiera sobrecargar operadores, en especial el + y el -... me gusta mucho el estilo de C++...
Pregunta solucionada
Disculpa es que vengo de lenguajes php y python donde estaba acostumbrado a usar el ==
Tienen razón es básico lo del equals, solo que la costumbre me cerro las ideas.
Gracias por su porte
En C# == y Equals no son lo mismo que en Java
Depende, y definitivamente no por la misma razon, en C#, para String el operador == compara por valor,
y el Equals por referencia (el caso contrario de Java), error de mi parte, en C#, ambos comparan por valor.Si quieres comparar por referencia en C#, hay que usar ReferenceEquals