Skip to content

Commit a4d3e56

Browse files
authored
Update 02_Boxing_and_Unboxing.md
1 parent 093544c commit a4d3e56

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

ch01/02_Boxing_and_Unboxing.md

+22-22
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,29 @@
2424
`e.intValue()`。例如,集合
2525

2626
```java
27-
List<Integer> ints = new ArrayList<Integer>();
28-
ints.add(1);
29-
int n = ints.get(0);
27+
List<Integer> ints = new ArrayList<Integer>();
28+
ints.add(1);
29+
int n = ints.get(0);
3030
```
3131

3232
相当于集合:
3333

3434
```java
35-
List<Integer> ints = new ArrayList<Integer>();
36-
ints.add(Integer.valueOf(1));
37-
int n = ints.get(0).intValue();
35+
List<Integer> ints = new ArrayList<Integer>();
36+
ints.add(Integer.valueOf(1));
37+
int n = ints.get(0).intValue();
3838
```
3939

4040
调用 `Integer.valueOf(1)` 与新的 `Integer(1)` 表达式类似,但是可能会缓存一些值以提高性能,正如我们稍后解释的那样。
4141

4242
在这里,再次,是代码来找到一个整数集合的和,方便打包为一个静态的方法:
4343

4444
```java
45-
public static int sum (List<Integer> ints) {
46-
int s = 0;
47-
for (int n : ints) { s += n; }
48-
return s;
49-
}
45+
public static int sum (List<Integer> ints) {
46+
int s = 0;
47+
for (int n : ints) { s += n; }
48+
return s;
49+
}
5050
```
5151

5252
为什么参数的类型是 `List<Integer>` 而不是 `List<int>`? 因为类型参数必须始终绑定到引用类型,而不是基本类型。
@@ -58,11 +58,11 @@
5858
我们可以重写这个方法,用Integer来替换每个 `int` 的出现:
5959

6060
```java
61-
public static Integer sumInteger(List<Integer> ints) {
62-
Integer s = 0;
63-
for (Integer n : ints) { s += n; }
64-
return s;
65-
}
61+
public static Integer sumInteger(List<Integer> ints) {
62+
Integer s = 0;
63+
for (Integer n : ints) { s += n; }
64+
return s;
65+
}
6666
```
6767

6868
此代码编译,但执行了很多不必要的工作。 循环的每个迭代将 `s``n` 中的值拆箱,执行加法操作,然后再次结束结果。使用 `Sun` 当前的编译器,测量结果显示
@@ -72,9 +72,9 @@
7272
来定义。 所以下面的两个断言使用 `Sun``JVM` 是成功的:
7373

7474
```java
75-
List<Integer> bigs = Arrays.asList(100,200,300);
76-
assert sumInteger(bigs) == sum(bigs);
77-
 assert sumInteger(bigs) != sumInteger(bigs); // 不推荐
75+
List<Integer> bigs = Arrays.asList(100,200,300);
76+
assert sumInteger(bigs) == sum(bigs);
77+
  assert sumInteger(bigs) != sumInteger(bigs); // 不推荐
7878
```
7979

8080
在第一个断言中,拆箱会导致值进行比较,所以结果是相同的。在第二个断言中,没有拆箱,两个方法调用返回不同整数对象,所以即使两个整数对象都表示结果也是不
@@ -85,9 +85,9 @@
8585
个字节或一个布尔值; 并在装箱时允许进行缓存。因此,与我们之前的例子相比,我们有以下几点:
8686

8787
```java
88-
List<Integer> smalls = Arrays.asList(1,2,3);
89-
assert sumInteger(smalls) == sum(smalls);
90-
assert sumInteger(smalls) == sumInteger(smalls); // 不推荐
88+
List<Integer> smalls = Arrays.asList(1,2,3);
89+
assert sumInteger(smalls) == sum(smalls);
90+
assert sumInteger(smalls) == sumInteger(smalls); // 不推荐
9191
```
9292

9393
这是因为 `6` 小于 `128`,所以装箱数值 `6` 总是返回正确的同一个对象。 一般来说,没有规定两次是否装箱相同的值返回相同或不同的对象,所以前面显示的不等

0 commit comments

Comments
 (0)