int溢出,就好像它是一个字节一样

时间:2019-07-03 09:37:15

标签: java integer int

在处理leet代码问题“最小堆栈”时,我使用push(int x)作为函数定义将元素推入ArrayList。

对于大于或等于-128(或-2 ^ 8)的输入,该程序可以正常工作。但是,如果数字小于该数字,则会出现错误。

  • 将push(int x)更改为push(Integer x)可解决问题
  • 但是我不明白:
    • 为什么int不起作用,我认为java自动取消装箱(将int转换为Integer)
    • 为什么将其视为字节(-128)

class MinStack {
    ArrayList<Integer> stack, mins;

    public MinStack() {
        stack = new ArrayList<>();
        mins = new ArrayList<>();

    }

    // change to Integer, works fine
    public void push(int x) {
        stack.add(x);
        if(mins.size() == 0 || mins.get(mins.size() - 1) >= x ){
           mins.add(x); 
        } 
    }

    public void pop() {

        if(stack.size() > 0){
            if(mins.size() > 0){
                if(stack.get(stack.size() - 1) == mins.get(mins.size() - 1)){
                    mins.remove(mins.size() - 1);
                }
            }
            stack.remove(stack.size() - 1);
        }



    }



    public int getMin() {
        return mins.get(mins.size() -  1);
    }
}

try:push(512),push(-128),push(-128),push(512),pop(),getMin(),pop(),getMin(),pop(),getMin()

输出:-128 -128 512 在int和Integer版本中都可以正常工作

try:push(512),push(-129),push(-129),push(512),pop(),getMin(),pop(),getMin(),pop(),getMin()

输出: 整数版本:-129 -129 -129 整数版本:-129 -129 512

0 个答案:

没有答案