String与Long、Integer执行equals问题

项目框架中有一个函数,其中一步是判断传入的参数值和数据库中的某个值是否相等。原本数据库的值规定为varchar类型,该函数没有任何问题。现在有个需求是需要把数据库中的整数或长整数类型的值读入之后再做判断,参数传入之后判断相等总返回false。

写了一段测试代码:

 

1  Long l  =   1 ;
2  String s  =   " 1 " ;
3  System.out.println(s.equals(l));

 

 

确定了一下确实是字符串和长整形比较的问题。

按照我之前的想法,l为非字符串类型,应该自动执行toString函数,再比较的时候应该返回true。于是查看了一下jdk的代码:

 

 1  /**
 2       * Compares this object to the specified object.  The result is
 3       * <code>true</code> if and only if the argument is not
 4       * <code>null</code> and is a <code>Long</code> object that
 5       * contains the same <code>long</code> value as this object.
 6       *
 7       *  @param    obj   the object to compare with.
 8       *  @return   <code>true</code> if the objects are the same;
 9       *          <code>false</code> otherwise.
10        */
11       public   boolean  equals(Object obj) {
12       if  (obj  instanceof  Long) {
13           return  value  ==  ((Long)obj).longValue();
14      }
15       return   false ;
16      }

 

 String.java的代码类似。原来执行equals的时候都是先判断着两个类是否有相互继承的关系,如果instanceof返回false的话,equals直接返回false。

于是在代码中先对Long执行toString,代码运行正常

转载于:https://www.cnblogs.com/WaWa/archive/2009/12/11/1621643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值