【问题标题】:Logical if always false on a servlet [duplicate]如果在 servlet 上始终为假,则为逻辑 [重复]
【发布时间】:2014-04-09 11:30:17
【问题描述】:

我试图在我的 servlet 上获取 3 个参数,为了代码的可读性,我将我的代码分成 3 个类,但在我的 DatabaseQuery 类的 query_a1 方法上,我总是得到 false,我不明白为什么! 这是我的 servlet 类:

数据库查询 公共类数据库查询 {

    //Query i aktivitetit 1
public static boolean query_a1(String user,String pass) {
    if (user== "andi" & pass=="andi")
        return true;
    else
        return  false;

}
//ky do te jete query i aktivitetit 2
public static void  query_a2() {

}
}

小服务程序

  import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    @WebServlet("/web2")
    public class Servlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {

            //merr aktivitetitn nga i cili vijne parametrat
            int activiteti=Integer.parseInt(req.getParameter("activitetiNR").toString());

            //krijo nje switch per cdo parameter 
          switch (activiteti){
          case 1:{
              //marrim te dhenat qe i perkasin aktivitetit
              String user = req.getParameter("user").toString();
              System.out.println(user);
              String pass = req.getParameter("pass").toString();
            System.out.println(pass);

              //i kalojme ne metoden e klases Aktiviteti1 dhe marrim pergjigje dhe me pas japim response
            response(resp,Aktiviteti1.kontrolloDhenat(user,pass));
          }
          break;
          }
        }
        private void response(HttpServletResponse resp, String msg)
                throws IOException {
            PrintWriter out = resp.getWriter();
            out.println(msg);
        }
    }

活动

public class Aktiviteti1 {
    //ketu vendosen kontrollet llogjike te aktivitetit 
public static String kontrolloDhenat(String user,String pass){
    //ndersa ketu therrasim queryn nga klasa database
if (DatabaseQuery.query_a1(user,pass)==true){

    return "Succes!";           
    }else{
        System.out.println(DatabaseQuery.query_a1(user,pass));
    return "Failure!";

    }
}
}

你有什么想法吗?

【问题讨论】:

    标签: java string servlets equality logical-operators


    【解决方案1】:
    • 您正在通过== 比较String 对象,但由于它们是对象,因此必须按如下方式比较它们string1.equals(string2)
    • 您正在使用 按位 AND 运算符 (&) 但此处必须使用 逻辑 运算符 (&&)。

    这里是更正后的 if 语句:

    if (user.equals("andi") && pass.equals("andi")) then {
        //foo
    }
    

    【讨论】:

      【解决方案2】:

      您需要重新访问字符串比较。字符串比较是使用equals() 方法而不是== 运算符完成的。所以下面的行是错误的。此外,& 是按位 AND 运算符,对于逻辑 AND,您需要使用 && 运算符。

      if (user== "andi" & pass=="andi")
      

      你应该使用

      if (user.equals("andi") && pass.equals("andi"))
      

      【讨论】:

      • 我做错了什么!谢谢楼主,成功了:)
      • 一切顺利!
      【解决方案3】:

      不用于比较字符串使用==使用equals

      您的代码: if (user=="andi" & pass=="andi") 像这样写:

          if(user.equals("andi")&&pass.equals("andi"))
      

      如果你想要 Ingore case(like ANDI or Andi),你应该使用如下:

         if(user.equalsIgnoreCase("andi")&&pass.equalsIgnoreCase("andi"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 2016-04-19
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 2021-03-05
        相关资源
        最近更新 更多