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。
答案 0 :(得分:0)
这是整数比较的问题。 stack.peek
和min.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
基元。