这是if 语句bug吗普通两个整数比较相等不成立,比较它们相减等于0就成立

已经用sout验证了emps.get(i).getId()的值是Integer类型的10001,ur.getEmp_id()的值也是同样整数包装类的10001,可是下面这条语句的条件不能触发.

if(emps.get(i).getId()==ur.getEmp_id()) {
//语句省略
}
而改成了如下写法就成功出发条件,为什么?
if((emps.get(i).getId()-ur.getEmp_id())==0) {
emps.remove(emps.get(i));
}

请教

对于两个Integer 变量 a 和 b,你的【相等】要是说 a 和 b 是同一个对象的话,应该用 ==,因为 == 用于比较两个变量是否指向同一个对象;你的【相等】要是指【值相等】的话,那当然要用 equals(compareTo 也行)。 对于 int 变量,只能用 ==,没啥好解释的。

因为采用“=”比较是否相等的时候,还会比较他们的内存地址是否相同,如果内存地址和值都相同,这时才相等。
而他们的值存储位置不同,也就是内存地址不一样,所以你比较的时候不相等;
如果你想作比较的话,可以转换成其他类型或者通过内置方法compareTo来进行比较。

对于对象,== 比较是对象地址 ,emps.get(i).getId()和ur.getEmp_id()不是一个对象,当然不相等;
Integer,比较值要用equals方法 emps.get(i).getId().equals(ur.getEmp_id())
或者 emps.get(i).getId().intValue() = ur.getEmp_id().intValue();直接比较数值
(emps.get(i).getId()-ur.getEmp_id())==0 因为右边是数值,所以实际上是把Integer拆箱成int值比较的
还有一个特殊情况,如果值在[-128, 127]之间,Integer是可以用==比较的。因为[-128, 127]的Ingeger用了缓存池,对象都是从缓存池中取的,是同一个对象