Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java堆栈函数衍射_Java_Stack - Fatal编程技术网

Java堆栈函数衍射

Java堆栈函数衍射,java,stack,Java,Stack,我在这里试图解决一个轻编码问题: 但我不知道为什么下面的代码不相同: public void pop() { // if (!minStack.isEmpty() && minStack.peek() == stack.peek()){ // minStack.pop(); // } // stack.pop(); int x = stack.pop(); if (!minStack.isEmpty() &&

我在这里试图解决一个轻编码问题:

但我不知道为什么下面的代码不相同:

public void pop() {
    // if (!minStack.isEmpty() && minStack.peek() == stack.peek()){
    //     minStack.pop();
    // }
    // stack.pop();
    int x = stack.pop();
    if (!minStack.isEmpty() && x == minStack.peek()) {
        minStack.pop();
    }
}
当我使用注释代码时,它出错了。为什么呢


非常感谢你

如果您有一堆基本体,这两个基本体都应该可以工作,因为您将使用
==
来比较内容


我假设您有类型为
Integer
的堆栈,在这种情况下,
=
检查引用相等,而您应该检查
值相等。使用
.equals()

第一个区别是,如果
stack
为空,而
minStack
也为空,该怎么办?那么这两段代码显然不是做同一件事的…@JonSkeet如果
stack
minStack
都是空的,这会不会导致两个块都调用
stack.pop()
并抛出异常?@DarthAndroid:我现在很困惑。。。让我再试一次:)啊-除了别的以外,
stack
minStack
的类型是什么?如果它们是
Stack
,那么
x==minStack.peek()
minStack.peek()==Stack.peek()
之间就有区别,前者比较
int
值,而后者比较引用。它们是精确堆叠的。我刚刚写了一篇不依赖于使用两个堆栈的文章。我认为这是一个更干净的选择。