autoboxing and unboxing

简介

Wrappers for primitive types are reference types.

Antoboxing:java的编译器在primitive types 和它们相对应的对象包装器之间的 自动转换,如int->Integer, double-> Double,反之就是unboxing。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28


List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i++) {
li.add(i);
}
// 编译器运行时候将他转化为
List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i++) {
li.add(Integer.valueOf(i));
}

// unboxing
public static int (List<Integer> li) {
int sum = 0;
for (Integer i: li)
if (i % 2 == 0)
sum += i;
return sum;
}
// 编译器运行时候将他转化为
public static int (List<Integer> li) {
int sum = 0;
for (Integer i : li)
if (i.intValue() % 2 == 0)
sum += i.intValue();
return sum;
}

hover over 悬停
使用diff merge进行新旧代码的比较。

资料

oracle docs of autoboxing
autobox And Unboxing Challenge