javase复习之 总结

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.heima.wrapclass;


public class {


* @param args
*/
public static void main(String[] args) {
Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);
//false

System.out.println(i1.equals(i2));
//true
System.out.println("-----------");

Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);
//false

System.out.println(i3.equals(i4));
//true
System.out.println("-----------");

Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6);
//true

System.out.println(i5.equals(i6));
//true
System.out.println("-----------");

Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));
//true

/*
* -128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取
* 如果超过了byte取值范围就会再新创建对象
*
* public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;


//i>= -128 && i <= 127
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
*/
}

}

总结

  • 底层代码可以理解成一个数组,这个数组索引0对应着-128、255对应着127,当传入的值在-128 - 127之间时自动装箱时会直接在这个数组中取值,进而引用地址是一样的,所以上面返回了true