1.Integer也有一个缓存,从-128-vm配置的数,默认是127
源码如下:
int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");//从vm的属性中读high if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue);//转成int i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1);//h必须是127-MAX_VALUE的 } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h;
2.几个静态成员变量
public static final int MIN_VALUE = 0x80000000;
public static final int MAX_VALUE = 0x7fffffff;
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
public static final int SIZE = 32;//二进制有多少位
public static final int BYTES = SIZE / Byte.SIZE;//占多少字节Byte
3.核心成员变量
private final int value;//Integer这个类,就是操作这个成员变量
4.核心方法
Integer核心的方法是在String和数字之间转化,但这个方法是通过Character实现的
核心思路是,String转数字的时候
得到char[]
根据char[i]和进制来得到相应的int
CharacterData这个类存了各种int和char对应的一维数组
数字转String的时候
每一位数字找到对应的CharacterData的数组里的相应的char的unicode码
static final String A_DATA = "\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800"+ "\u100F\u4800\u100F\u4800\u100F\u5800\u400F\u5000\u400F\u5800\u400F\u6000\u400F"+ "\u5000\u400F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800"+ "\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F\u4800\u100F"+ "\u4800\u100F\u4800\u100F\u5000\u400F\u5000\u400F\u5000\u400F\u5800\u400F\u6000"+ "\u400C\u6800\030\u6800\030\u2800\030\u2800\u601A\u2800\030\u6800\030\u6800"+ "\030\uE800\025\uE800\026\u6800\030\u2000\031\u3800\030\u2000\024\u3800\030"+ "\u3800\030\u1800\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u1800"+ "\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u1800\u3609\u3800\030\u6800\030"+ "\uE800\031\u6800\031\uE800\031\u6800\030\u6800\030\202\u7FE1\202\u7FE1\202"+