gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:31 26 4
gpt4 key购买 nike

我的程序包括以下代码段,它根据两个变量 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)) 更改为
如果(xyz == 0)

那么结果会是这样

j1=0j2=0 7698380----7698380

差异为0

寻找匹配`

我觉得控制if循环的两个条件应该是一样的,为什么结果if这么不一样呢?非常感谢您的回答。

最佳答案

嗯,temp1.get(j1) 是否返回 Integer 而不是 int?如果是这样,那么有问题的 Integer 是不相同的(即不是 ==)。尽管从 equals() 的角度来看它们是相等的。

编辑:

解决此问题的一种方法是使 temp1 和 temp2 返回 int 而不是 Integer。您可以在此处使用简单的自动装箱(或在本例中为自动拆箱)。

例如,您的类(class)是 SithLord,您的整数属性是 jediKills。目前你的类(class)看起来像这样:

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。 (请注意,我在这里假设 null Integer 为零。该假设可能适用于您的类(class),也可能不适用。但对于上面的类(class),它确实如此,因为西斯领主肯定会宣传他的杀戮。)

或者你可以这样做:

public class SithLord {
private int jediKills;
public int getJediKills() { return jediKills; }
}

无论哪种方式,如果您想在此处使用 == 运算符,则该类需要返回一个 int

至于为什么这在过去对您有用,我只能推测,因为我还没有看到代码。但是可以肯定地说 == 是真的当且仅当 == 两边的引用是相同的。如果您对对象进行这种控制,就会发生这种情况。但是如果你自动装箱原始类型,你就放弃了,因为每次你自动装箱时,Java 都会为你创建新的原始类型包装器。因为它们是新的,所以它们不会是相同的引用。

希望对您有所帮助。

关于java - 使用 x==Y 或 (x-y)==0 控制 if 条件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6447449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com