Homework1——印象最深刻的error

  我印象最深刻的error就是JAVA中equals和==的区别。

  这是我在写web大作业时出现的错误:

 1 public void doPost(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {    
 3         //String checkcode = (String) request.getSession().getAttribute("safecode");
 4         //System.out.println(checkcode);
 5         request.setCharacterEncoding("UTF-8");
 6         response.setCharacterEncoding("UTF-8");
 7         response.setContentType("text/html;charset=UTF-8");        String id = request.getParameter("id");
 8         String password = request.getParameter("password");
 9         String password1=request.getParameter("password1");
10         PrintWriter out = response.getWriter();
11         MessagerDB messagerDB=new MessagerDB(0);
12         try {
13                 if(id=="")
14                 {
15                     out.write("<html><head><title>两次密码不一致</title></head><body>");
16                     out.write("<h1>对不起,用户名不能为空</h1></body></html>");
17                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
18                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
19                     out.flush();
20                 }
21                 else if(password=="")
22                 {
23                     out.write("<html><head><title>两次密码不一致</title></head><body>");
24                     out.write("<h1>对不起,密码不能为空</h1></body></html>");
25                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
26                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
27                     out.flush();
28                 }
29                 else if(!password==password1)
30                 {
31                     out.write("<html><head><title>两次密码不一致</title></head><body>");
32                     out.write("<h1>对不起,您两次输入的密码不一致,请重新输入</h1></body></html>");
33                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
34                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
35                     out.flush();
36                 }
37                 else if(messagerDB.add(id,password,"1")){
38                     response.sendRedirect("/redcross1/messager.jsp");
39                 } 
40                 else
41                 {
42                     out.write("<html><head><title>FailedLogin</title></head><body>");
43                     out.write("<h1>对不起,此ID已经被注册,请重新输入</h1></body></html>");
44                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
45                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
46                     out.flush();
47                 }
48         } catch (Exception e) {
49             // TODO Auto-generated catch block
50             e.printStackTrace();
51         }
52     }

  String类的比较,我全部用的是==来比较的,导致密码比较的时候总是错误,即使输入正确的密码,也无法成功进入到程序中。这个错误困扰了我好长时间。最后,我通过在每个if中输出字符,才发现原来是判断String类是否相等时出现了错误,导致程序根本没有进入到任何一个if中。通过百度才知道,原来判断两个String的值是否相等应该用a.equals(b),这种方法来判断,而==判断的是两个String的地址是否相等,和C++中的判断方法不同。然后,我将代码修改成为以下这样:

 1 public void doPost(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {    
 3         //String checkcode = (String) request.getSession().getAttribute("safecode");
 4         //System.out.println(checkcode);
 5         request.setCharacterEncoding("UTF-8");
 6         response.setCharacterEncoding("UTF-8");
 7         response.setContentType("text/html;charset=UTF-8");        String id = request.getParameter("id");
 8         String password = request.getParameter("password");
 9         String password1=request.getParameter("password1");
10         PrintWriter out = response.getWriter();
11         MessagerDB messagerDB=new MessagerDB(0);
12         try {
13                 if(id.equals(""))
14                 {
15                     out.write("<html><head><title>两次密码不一致</title></head><body>");
16                     out.write("<h1>对不起,用户名不能为空</h1></body></html>");
17                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
18                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
19                     out.flush();
20                 }
21                 else if(password.equals(""))
22                 {
23                     out.write("<html><head><title>两次密码不一致</title></head><body>");
24                     out.write("<h1>对不起,密码不能为空</h1></body></html>");
25                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
26                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
27                     out.flush();
28                 }
29                 else if(!password.equals(password1))
30                 {
31                     out.write("<html><head><title>两次密码不一致</title></head><body>");
32                     out.write("<h1>对不起,您两次输入的密码不一致,请重新输入</h1></body></html>");
33                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
34                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
35                     out.flush();
36                 }
37                 else if(messagerDB.add(id,password,"1")){
38                     response.sendRedirect("/redcross1/messager.jsp");
39                 } 
40                 else
41                 {
42                     out.write("<html><head><title>FailedLogin</title></head><body>");
43                     out.write("<h1>对不起,此ID已经被注册,请重新输入</h1></body></html>");
44                     out.write("<meta http-equiv=\"Content-Language\" content=\"zh-CN\">"
45                             + "<meta http-equiv=\"refresh\" content=\"1;url=/redcross1/add.jsp\">");
46                     out.flush();
47                 }
48         } catch (Exception e) {
49             // TODO Auto-generated catch block
50             e.printStackTrace();
51         }
52     }

  通过更改使得程序可以正确运行,即输入正确的密码可以进入到系统中。

posted @ 2016-03-04 15:58  相儒以沫  阅读(220)  评论(0)    收藏  举报