【问题标题】:java, two integers, they are equal but [duplicate]java,两个整数,它们相等但[重复]
【发布时间】:2015-03-31 05:55:47
【问题描述】:
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 是 Stack(Integer),min 是 ArrayList(Integer),但是第二个如果 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。

【问题讨论】:

  • ´你试过调试你的代码吗?
  • 都是整数
  • 能不能把min和stack的内容也加进去

标签: java


【解决方案1】:

这是一个整数比较的问题。 stack.peekmin.get(min.size()-1) 都返回 Integers。即使它们包含相同的 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 原语。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多