1 package com.hangao.basic;
2
3 /**
4 * @author hangao hangao1204@hotmail.com
5 *
6 */
7 public class TestInt {
8 public static void main(String[] args) {
9 Integer ie1 = 127;
10 Integer ie2 = 127;
11 System.out.println("Integer 127==127:" + (ie1 == ie2));//Integer 127==127:true
12
13 Integer ie3 = new Integer(127);
14 Integer ie4 = new Integer(127);
15 System.out.println("new Integer 127==127:" + (ie3 == ie4));//new Integer 127==127:false
16
17 Integer ie5 = 128;
18 Integer ie6 = 128;
19 System.out.println("Integer 128==128:" + (ie5 == ie6));//Integer 128==128:false
20
21 Integer ie7 = new Integer(128);
22 Integer ie8 = new Integer(128);
23 System.out.println("new Integer 128==128:" + (ie7 == ie8));//new Integer 128==128:false
24
25 analysis();
26 }
27
28 private static void analysis() {
29 Integer ie0 = 127;
30 System.out.println(ie0);
31 /* L0
32 LINENUMBER 5 L0
33 BIPUSH 127
34 INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;
35 ASTORE 1*/
36 /*从字节码文件可以看出此处有一个自动装箱的动作*/
37
38 /*public static Integer valueOf(int i) {
39 if (i >= IntegerCache.low && i <= IntegerCache.high)
40 return IntegerCache.cache[i + (-IntegerCache.low)];
41 return new Integer(i);
42 }*/
43 /*而Integeter这个类的装箱过程从Integeter源代码可以看出在(-128 - 127)之间的int值
44 其实返回的是IntegerCache里面的cache[]数组里面的对象*/
45
46 /*private static class IntegerCache {
47 static final int low = -128;
48 static final int high;
49 static final Integer cache[];
50
51 static {
52 // high value may be configured by property
53 int h = 127;
54 String integerCacheHighPropValue =
55 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
56 if (integerCacheHighPropValue != null) {
57 try {
58 int i = Integer.parseInt(integerCacheHighPropValue);
59 i = Math.max(i, 127);
60 // Maximum array size is Integer.MAX_VALUE
61 h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
62 } catch( NumberFormatException nfe) {
63 // If the property cannot be parsed into an int, ignore it.
64 }
65 }
66 high = h;
67
68 cache = new Integer[(high - low) + 1];
69 int j = low;
70 for(int k = 0; k < cache.length; k++)
71 cache[k] = new Integer(j++);
72
73 // range [-128, 127] must be interned (JLS7 5.1.7)
74 assert IntegerCache.high >= 127;
75 }
76
77 private IntegerCache() {}
78 }*/
79 /*IntegerCache是Integer的内部类,在被jdk加载的时候,会去初始化创建(-128 - 127)之间所有int值对应的Integer类数组
80 使用的时候可以从里面取*/
81 }
82 }