用 == 比较两个数目字是否相等,惊奇的发现结果却不等
用 == 比较两个数字是否相等,惊奇的发现结果却不等
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比较的不是具体值而是对象
即使值一样 对象也不一样
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比较的不是具体值而是对象
即使值一样 对象也不一样