关于containsAll方法的问题???
发生了一个好奇怪的问题,我用List里面的一个containsAll方法来比较2个list是不是一样的,结果明明一样的2个list他居然给我返回一个false
- Java code
public static boolean ListsCompare(List idFromDB, List idFromSolrSearch) { System.out.println("###########idFromDB " + idFromDB.size() + " ###########"); for (int i = 0; i < idFromDB.size(); i++) { System.out.println(idFromDB.get(i)); } System.out.println("###########idFromSolrSearch " + idFromSolrSearch.size() + " ###########"); for (int i = 0; i < idFromSolrSearch.size(); i++) { System.out.println(idFromSolrSearch.get(i)); } System.out.println("idFromDB:" + idFromDB); System.out.println("idFromSolrSearch:" + idFromSolrSearch); if (idFromDB.containsAll(idFromSolrSearch)) { renderJSON(new Result("一样的!")); return true; } else { renderJSON(new Result("不一样的")); return false; } }控制台打印的信息是:
###########idFromDB 1 ###########
2566
###########idFromSolrSearch 1 ###########
2566
idFromDB:[2566]
idFromSolrSearch:[2566]
我看过api了:
- Java code
containsAllboolean containsAll(Collection<?> c)如果列表包含指定 collection 的所有元素,则返回 true。 指定者:接口 Collection<E> 中的 containsAll参数:c - 要在列表中检查其包含性的 collection 返回:如果列表包含指定 collection 的所有元素,则返回 true 抛出: ClassCastException - 如果指定 collection 中的一个或多个元素的类型和此列表不兼容(可选) NullPointerException - 如果指定的 collection 包含一个或多个 null 元素,并且此列表不允许 null 元素(可选),或者指定的 collection 为 null另请参见:contains(Object)
我写了一个测试:
- Java code
public class testDateTime { public static void main(String args[]) { List<Long> idFromDB = new ArrayList(); List<Long> idFromSolrSearch = new ArrayList(); idFromDB.add(1L); idFromDB.add(2L); idFromDB.add(3L); idFromSolrSearch.add(1L); idFromSolrSearch.add(2L); if (idFromDB.containsAll(idFromSolrSearch)) { System.out.println("true"); } else { System.out.println("false"); } }}为什么这个又是打印true的呢?我是新手小白,请老师指点我一下,谢谢
[解决办法]
看一下Java享元模式。
考虑整数-128到127,而这个范围是在一个字节之中。这个范围的整数在开发我们可能要经常用到。所以呢,为了执行效率和节省内存空间。大家调用的时候,创建的对象值在这个范围中时,java所指向的是同一个对象
[解决办法]
junit测试代码
- Java code
@Test public void containsAllTest(){ List idFromDB = new ArrayList(); List idFromSolrSearch = new ArrayList(); idFromDB.add(1); idFromSolrSearch.add("1"); System.out.println("idFromDB: "+idFromDB); System.out.println("idFromSolrSearch: "+idFromSolrSearch); System.out.println(idFromDB.containsAll(idFromSolrSearch)); }