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

用 == 比较两个数字是否相等,惊奇的发现结果却不等
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 ,好奇怪,就解释。。。
------解决思路----------------------
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
------解决思路----------------------
list里面存放的是对象 
equals比较的不是具体值而是对象
即使值一样 对象也不一样