关于equals的问题

来源:互联网 发布:贵州广电网络好用吗 编辑:程序博客网 时间:2024/06/05 02:22

关于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前面进行比较.
  • 一定要遵循常量在前的习惯.

借鉴的资料

  • 关于equals的问题
原创粉丝点击