请教一下各位,最近碰到一个问题,我在jsp中用equals()方法判断字符串是否相等总是出错,请大家帮忙看一下。
代码:
<%
request.setCharacterEncoding("gb2312");
String b=request.getParameter("hiddenField");
if(b.equals("sub")){
String s=request.getParameter("select");
String sql="";
if(s.equals("身份证")) {
sql="select * from UserInf where Identification='"+request.getParameter("num")+"'";
}
else sql="select * from UserInf where CardNum='"+request.getParameter("num")+"'";
try{
User u=User.getUser(sql);
session.setAttribute("user",u);
}
catch(UserNotFoundException e){
e.printStackTrace();
}
}
%>
color=#FF0000]错误:[[/color]
exception org.apache.jasper.JasperException: An exception occurred processing JSP page /admin/CardLost.jsp at line 5552: <%
53: request.setCharacterEncoding("gb2312");
54: String b=request.getParameter("hiddenField");
55: if(b.equals("sub")){
56: String s=request.getParameter("select");
57: String sql="";
58: if(s.equals("身份证")) {
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause java.lang.NullPointerException
代码:
<%
request.setCharacterEncoding("gb2312");
String b=request.getParameter("hiddenField");
if(b.equals("sub")){
String s=request.getParameter("select");
String sql="";
if(s.equals("身份证")) {
sql="select * from UserInf where Identification='"+request.getParameter("num")+"'";
}
else sql="select * from UserInf where CardNum='"+request.getParameter("num")+"'";
try{
User u=User.getUser(sql);
session.setAttribute("user",u);
}
catch(UserNotFoundException e){
e.printStackTrace();
}
}
%>
color=#FF0000]错误:[[/color]
exception org.apache.jasper.JasperException: An exception occurred processing JSP page /admin/CardLost.jsp at line 5552: <%
53: request.setCharacterEncoding("gb2312");
54: String b=request.getParameter("hiddenField");
55: if(b.equals("sub")){
56: String s=request.getParameter("select");
57: String sql="";
58: if(s.equals("身份证")) {
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause java.lang.NullPointerException
s.equals("身份证")改"身份证".equals(s)
b为null吧?
因为有可能你的b,s变量是null,这样null调用equals方法就会出错,而("sub")和("身份证")都永远不为空,就不会出错误,如果你非要反过来,就得加上判断,判断是否为null,主要是因为它是null,在内存中没有开辟空间,既然连空间都没有,你说它还能干什么?我没办营业执照,还卖黄色光盘,你说我会不会触犯法律?一样的道理
s.equals("身份证")改"身份证".equals(s)调用equals方法是一般用常量放在前面,变量放在后,反之容易出现空指针异常
养成好习惯,这点比较重要~!
要是判断空的话b!=null要作为第一个条件
在编程中多考虑空指针的问题
尽量避免出现类似错误
b!= null && "sss".equals(b)