关于equals的问题
equals中空指针的问题
[TOC]
在EasyMall的项目重构中发现的问题
也怪我当时并没有没有仔细想回来之后才发现的
错误代码
String remname = request.getParameter("remname");
UserService service = new UserService();
User user = service.loginUser(username, password);
if (user != null) {// 用户密码正确
// 4.实现记住用户名功能键
if ("true".equals(remname)) {
Cookie cookie = new Cookie("remname", username);
cookie.setPath(request.getContextPath() + "/");
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
} else {
Cookie cookie = new Cookie("remname", "");
cookie.setPath(request.getContextPath() + "/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
在这里”true”.equals(remname)方法不会产生空指针但是使用remname.equals(“true”)方法就会产生空指针异常.
错误原因
- 在equals的底层代码中,会判定字符串是否为空,如果经一个可以为空的字符串放在前面比较的话会产生空指针异常!!!这也是为什么我们在重写equals的方法时要写防止为null.
- 在使用方法的时候也要注意null不可以调用方法,所以要保持常量在前.
反思
- 在写代码的时候如果该变量可以为空或者在付初值的时候为null那就要避免放到equals前面进行比较.
- 一定要遵循常量在前的习惯.