在Java中使用包装类而不是原语的好处

vee*_*psk 6 java wrapper

在非常抽象的层面上,我知道包装类,创建原始数据类型的对象,但我很好奇为什么我们需要使用包装类以及它们对原始数据类型提供了什么好处.

Evg*_*eev 8

例如,首先是集合List<Integer>,你不能int在这里使用原始.实际上任何可以使用不同对象类型的通用类/接口

public interface Callable<V> {
    V call() throws Exception;
}
Run Code Online (Sandbox Code Playgroud)

请注意,最好使用新的Integer(i)完成换行,但Integer.valueOf(i)后者将尝试使用缓存.解包是以Integer.intValue()完成的.这些原语的包装/展开是典型的操作,Java 5引入了自动装箱/拆箱

List<Integer> list = new ArrayList<>();
list.add(1);
int i = list.get(0);
Run Code Online (Sandbox Code Playgroud)

此代码由Java编译器自动转换为

list.add(Integer.valueIf(1));
int i = list.get(0).intValue();    // this is where NullPointerException sometimes happens
Run Code Online (Sandbox Code Playgroud)