从一事无成到仅成一事

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,代码运行正常

posted on 2009-12-11 09:25  nonesuccess  阅读(1674)  评论(0编辑  收藏

My Links

Blog Stats