用 == 比较两个数字是否相等,惊奇的发现结果却不等

jkingzhou 2014-10-06 10:49:19
List<Long> AddList = new ArrayList<Long>();
List<Long> removeList = new ArrayList<Long>();


for(long i = 0; i < 100000; i++){

AddList.add(i);
}

System.out.println("AddList.size():" +AddList.size());

for(long i = 10; i < 100000; i+=10){

removeList.add(i);
}

System.out.println("removeList.size():" +removeList.size());

int index = 0;
int num = 0;

for(int i = 0; i < AddList.size(); i++){
//循环迭代 橱窗表合集
for(int y = 0; y < removeList.size(); y++){

if(AddList.get(i) == removeList.get(y)){

num ++;

//System.out.println("找到一个相同: " +AddList.get(i) + " == "+removeList.get(y));

//removeList.remove(y);
}

index ++;
break;
}

}

System.out.println("一个循环了多少次:" +index +" 找出相同的数量:" + num );
}


用 AddList.get(i) == removeList.get(y) 去排查,结果是12 ,用AddList.get(i) - removeList.get(y) == 0 去排查,结果是999 ,前者只能排查出 10 - 120 ,好奇怪,就解释。。。
...全文
211 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2014-10-07
  • 打赏
  • 举报
回复
int aaa = AddList.get(i); int bbb = removeList.get(y); 然后比较aaa == bbb即可。 因为,你现在用的是Integer == Integer而不是int == int 这个时候,比较的是两个java.lang.Integer,看他的源码,你会发现,它会缓存[-128, +127] 这点Integer对象,供Integer.valueOf方法使用,而你之前调用AddList.add(i);removeList.add(i);的时候,自动将int i封箱成Integer,就是通过这个Integer.valueOf方法,所以,你10-120这几个数字,两个list保存的是同一个对象,所以Integer==Integer返回true,而130开始,超过默认的缓存范围,两边放的是不同的Integer对象,Integer==Integer返回false
Yang_outlook 2014-10-07
  • 打赏
  • 举报
回复
list里面存放的是对象 equals比较的不是具体值而是对象 即使值一样 对象也不一样

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧