java,两个整数,它们是平等但是

时间:2015-03-31 05:55:47

标签: java

public void pop() {
    int a = stack.peek();
    int b = min.get(min.size()-1);
    System.out.println("a:"+a+" "+"b:"+b);
    if (a==b) {
        System.out.println("111");
    }
    if (stack.peek()==min.get(min.size()-1)) {
        System.out.println("222");
    }
    stack.pop();
}

我创建了一个名为MinStack的类,这里是pop(),变量堆栈是一个Stack(整数),min是一个ArrayList(整数),但是第二个if stmt并不总是正常工作。

我得到了这样的控制台:

a:512 b:-1000
a:-1000 b:-1000
111
a:-1000 b:-1000
111

我认为“111”和“222”将一起显示,但这里不是。 如果我将第二个if stmt更改为stack.peek()-min.get(min.size()-1)==0,那么它是否正常工作,为什么会发生这种情况?

提前致谢。

编辑:

我知道哪里出错了,我必须使用stack.peek()。intValue()== min.get(min.size() - 1).intValue(),因为它们是Integer。

1 个答案:

答案 0 :(得分:0)

这是整数比较的问题。 stack.peekmin.get(min.size()-1)都返回Integer个。即使它们包含相同的int值,它们也不是相同的Integer实例,因此比较返回false。

将您的代码更改为:

if (stack.peek().equals(min.get(min.size()-1))) {
    System.out.println("222");
}

替代比较stack.peek()-min.get(min.size()-1)==0返回true,因为您在这里比较两个int基元。