加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用x == Y或(x-y)== 0来控制if条件的问题

发布时间:2020-12-15 08:41:27 所属栏目:Java 来源:网络整理
导读:我的程序包括以下代码段,它根据两个变量temp.get(j1)和temp(j2)是否相等来执行. for (int j1 =0; j12;j1++) { for (int j2 =0; j22;j2++) { System.out.println("j1="+j1+"j2="+j2+" "+temp1.get(j1)+"----"+temp2.get(j2)); int xyz = temp1.get(j1)-temp2.
我的程序包括以下代码段,它根据两个变量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))更改为
??????if(xyz == 0)

然后结果看起来像

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都会为你创建原始类型的新包装器.而且因为它们是新的,它们不会是相同的参考.

希望有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读