含泪总结String类==与equals的区别

来源:互联网 发布:淘宝联盟怎么推广 编辑:程序博客网 时间:2024/06/09 19:59

今天写了个注册系统,其中一段代码如下:


     String _username = request.getParameter("username");
     String _password1 = request.getParameter("password1");
     String _password2 = request.getParameter("password2");
     String _email = request.getParameter("email");

     if(_email == "")
          _email = "no email";

     if(
             (_username == (""))||
             (_password1 == (""))||
             (_password2 == (""))||
             (!_password1 == (_password2))){
          response.sendRedirect(response.encodeURL("register.jsp"));
     }

     else{

             ......

     }


       结果怎么调试都跳到“response.sendRedirect(response.encodeURL("register.jsp"));”完全不执行else

调试了半天突然想起来String类中==和equals的区别:


       "==" 比较的是两个对象的引用 (references),并不是他们的内容,所以即使他们内容相同只要引用不同依然返回false.


       equals(Object) 方法为 Object 类中定义的方法,所用按照默认方式定义过的类均是其子类。 也就是说 Object 类为所有类的超类 (super class,也叫父类、基类等),在Object 中的 equals(Object) 方法其标准形式为

public boolean equals(Object obj)

  返回类型为 boolean ,即 true/false 与 "==" 返回类型一样。Object 类中定义的 equals(Object) 方法是直接使用 "==" 比较的两个对象,所以在没有覆盖 (override,或称改写、重写) equals(Object) 方法的情况下,equals(Object) 与 "==" 一样是比较的引用。


       但是String类的equals(Object) 方法(来自java.lang.String)覆盖了从 Object 继承来的的 equals(Object) 方法,用以比较字符串内容是否相同。


所以把代码改成:(其实只用改黑字)


......

    if(
             (_username.equals(""))||
             (_password1.equals(""))||
             (_password2.equals(""))||
             (!_password1.equals(_password2))){
          response.sendRedirect(response.encodeURL("register.jsp"));
     }

......


就OK了!

原创粉丝点击