int与integer的使用,该如何解决

int与integer的使用
jdk1.5之后有l auto-boxing

String s="33";
int i=Integer.parseInt(s);

这样是可以正常run的
我看到现在项目里面的id都是Integer类型的
我想问,为什么不用int呢
用Integer好处在哪

String s="33";
int i=Integer.parseInt(s);

这段代码跑可以,但是有没有什么问题?
------解决方案--------------------
int是形式变量,比如用一个void函数操作int,在原函数中值是不会变的,比如:
public static void main(String[] args){
        int i = 1;
        changeNum(i);
        System.out.println(i);
        //输出还是1
}

public static void changeNum(){
        i++;
}


所以你已经发现,int只是基本数据类型,只能在生命周期内有效,他不是一个对象。
但是Integer作为一个对象存在,是实实在在的。
举个例子,你手里有一本书,别人撕掉一页,就少了一页。
但是你脑中有一本书,别人再怎么撕,因为他是不存在的,不是对象,别人只能操作对象,所以书还是原来的书。
------解决方案--------------------

import java.util.*;

public class IntegerTest {

    public static void main(final String[] args) {
        Integer integer1 = new Integer("1");
        Integer integer2 = new Integer("1");
        if (integer1 == integer2) {
            System.out.println("Integer(\"1\") == Integer(\"1\")");
        } else {
            System.out.println("Integer(\"1\") != Integer(\"1\")");
        }

        Integer integer3 = 1;
        Integer integer4 = 1;
        if (integer3 == integer4) {
            System.out.println("1 == 1");
        } else {
            System.out.println("1 != 1");
        }

        Integer integer5 = 128;
        Integer integer6 = 128;
        if (integer5 == integer6) {
            System.out.println("128 == 128");
        } else {
            System.out.println("128 != 128");
        }

        // List<int> list = new ArrayList<>(); // 编译错误
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        for (Integer element : list) {
            System.out.println(element);
        }
    }
}


输出:(按下Ctrl+A查看)
Integer("1") != Integer("1")
1 == 1
128 != 128
1
2
3


说明:
上面的示例的第30行使用基本数据类型int会发生错误,这应该是用Integer的最大的好处。
但是使用Integer也有很多需要注意的细节,请参考示例的输出。