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

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


     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了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值