Java 比较使用参数的对象时始终返回false
我不知道为什么它在与使用参数的帐户进行比较时总是返回false。仅当帐户为硬编码时才返回trueJava 比较使用参数的对象时始终返回false,java,servlets,set,Java,Servlets,Set,我不知道为什么它在与使用参数的帐户进行比较时总是返回false。仅当帐户为硬编码时才返回true public class Account { public Account(String username, String password, String lastname, String firstname){ this.username = username; this.password = password; this.firstnam
public class Account
{
public Account(String username, String password, String lastname, String firstname){
this.username = username;
this.password = password;
this.firstname = firstname;
this.lastname = lastname;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
private String username;
private String password;
private String firstname;
private String lastname;
public boolean equals(Object obj)
{
boolean result = false;
if (obj != null && obj instanceof Account)
{
Account p = (Account)obj;
if ( getUsername().equals(p.getUsername())
&& getPassword() == p.getPassword() )
{
result = true;
}
}
return result;
}
}
我的Servlet
Set<Account> acc = new HashSet<Account>();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
acc.add(new Account("test1", "pass123", "Boom", "Bang"));
acc.add(new Account("test2", "pass123", "Beam", "Beng"));
PrintWriter out = response.getWriter();
String username = "";
String password = "";
if(request.getParameter("Username") != null){
username = request.getParameter("Username");
}
if(request.getParameter("Password") != null){
password = request.getParameter("Password");
}
Account act1 = new Account(username, password, "", "","");
System.out.print(username+password); // test if the username and password change based on the parameter
/*
Works only on hard code
Account act1 = new Account("test1", "pass123", "", "","");
*/
out.print("<html>");
out.print("<head><link href='layoutit/css/bootstrap.min.css' rel='stylesheet'>"
+ "<link href='layoutit/css/style.css' rel='stylesheet'>");
out.print("<title></title>");
out.print("</head>");
out.print("<body");
if(acc.contains(act1)){ // the condition that always return false if not hardcode
out.print("<h3>Click <a href='displayuser.html'>here</a> to continue.</h3>");
}
else
out.print("<h1>Invalid user account entered.Click <a href='index.html'>here</a> to login.</h1>");
out.print("</body>");
out.print("</hmtl>");
out.close();
}
设置为继续。”);
}
其他的
打印(“输入的用户帐户无效。单击以登录”);
输出。打印(“”);
输出。打印(“”);
out.close();
}
在比较密码时使用.equals
而不是=
(复制自我对问题的评论)密码也是字符串,但您要使用
=
进行比较,请使用.equals
。如下所示使用它:
if ( getUsername().equals(p.getUsername())
&& getPassword() == p.getPassword() )
到
此外,当您使用instanceof
运算符时,不需要单独的空检查
所以,你可以写这行
if(obj!=null&&obj账户实例)
作为
if(obj instanceof Account)
如果您使用.equals而不是==来比较密码,它会起作用吗?谢谢。我错过了这一点。:)所以在这里接受正确的答案。。。
if ( getUsername().equals(p.getUsername())
&& getPassword().equals(p.getPassword()) )