java – 使用x == Y或(x-y)== 0来控制if条件的问题
我的程序包括以下代码段,它根据两个变量temp.get(j1)和temp(j2)是否相等来执行.
for (int j1 =0; j1<2;j1++) { for (int j2 =0; j2<2;j2++) { System.out.println("j1="+j1+"j2="+j2+" "+temp1.get(j1)+"----"+temp2.get(j2)); int xyz = temp1.get(j1)-temp2.get(j2); System.out.println("the difference is "+ xyz); if (temp1.get(j1)==temp2.get(j2)) { System.out.println("find match"); } } } 程序打印出来就像 j1 = 0j2 = 0 7698380 —- 7698380 差异是0 即使两个值temp1.get(j1)和temp2.??get(j2)重叠,“if”部分也没有经过.如果我将if(temp1.get(j1)== temp2.??get(j2))更改为 然后结果看起来像 j1 = 0j2 = 0 7698380 —- 7698380 差异是0 找到匹配 我认为控制if循环的两个条件应该是相同的,为什么结果如此不同?非常感谢你的回答. 解决方法
嗯,temp1.get(j1)是否返回一个Integer而不是一个int?如果是这样,则所讨论的整数不相同(即不是==).尽管从equals()的角度看它们是相同的.
编辑: 解决此问题的一种方法是使temp1和temp2返回int而不是Integer.您可以在此处使用简单的自动装箱(或在这种情况下为自动装箱). 比如说你的类是SithLord,你的整数属性是jediKills.目前你的班级看起来像这样: public class SithLord { private Integer jediKills; public Integer getJediKills() { return jediKills; } } 您所要做的就是将其更改为: public class SithLord { private Integer jediKills; public int getJediKills() { return (jediKills == null ? 0 : jediKills); } } Java会自动将变量转换为int. (请注意,我在这里假设一个零整数是零.这个假设可能适用于你的班级,也可能不适用于你的班级.但是对于上面的班级来说,因为西斯领主肯定会宣传他的杀戮.) 或者你可以这样做: public class SithLord { private int jediKills; public int getJediKills() { return jediKills; } } 无论哪种方式,如果你想在这里使用==运算符,那么类需要返回一个int. 至于为什么这对你来说可能有用,我只能推测,因为我没有看到代码.但是可以肯定地说,如果==两侧的引用是同一个,那么==将是真的.如果您对对象进行这种控制,就会发生这种情况.但是如果你使用autobox原始类型,那么你就会放弃它,因为每次你自动装箱时,Java都会为你创建原始类型的新包装器.而且因为它们是新的,它们不会是相同的参考. 希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |