Integer有三种创建方式
Integer i = Integer.valueOf(1) ;
Integer i = 1 ;
Integer i = new Integer(1) ;
1. Integer i = Integer.valueOf(1)
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
- Integer.valueOf(1),会先从缓存常量池中拿值
- jdk1.5之后 ,Integer.valueOf() 中有个内部类 IntegerCache,类似于一个常量数组,也叫对象池,它维护了一个 Integer 数组 cache,长度为(128+127+1)=256,意味着 Integer 缓存池的大小默认为 -128 ~ 127 ;
- Integer类中还有一个静态代码块,默认创建了数值【-128-127】的 Integer 缓存数据;所以当 Integer.valueOf(1) 的时候,会直接在该在对象池找到该值的引用;
- 在 jdk 1.8 中,在启动 JVM 的时候,可以通过配置来指定这个缓冲池的大小
2. Integer i = 1
Integer i = 1
- Integer 是int的包装类,这样的写法会自动装箱,装箱操作是由Integer.valueOf()方法完成的,所以 Integer i = 1 等于 Integer i = Integer.valueOf(1)
3. Integer i = new Integer(1)
Integer i = new Integer(1)
- Integer的构造方法,创建一个新的Integer对象
比较不同
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = Integer.valueOf(127);
Integer d = Integer.valueOf(127);
Integer e = new Integer(127);
Integer f = new Integer(127);
//这三种创建方式有何不同?
System.out.println("Integer = 127 方式 : " + (a == b));
System.out.println("Integer.valueOf() 方式 :" + (c == d));
System.out.println("new Integer() 方式 : " + (e == f));
//当值在 -128~127之间时,Integer = 127 和Integer.valueOf() 会先从常量池池中拿值
System.out.println("--------");
System.out.println("a.equals(b) :" + a.equals(b));
System.out.println("c.equals(d) :" + c.equals(d));
System.out.println("e.equals(f) :" + e.equals(f));
}
另外,比较大小可以使用compareTo()方法
源码:
//先把Integer拆箱成int
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
//比较xy,x>y,返回1;x==y,返回0;x<y,返回-1 ↓
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
public static void main(String[] args) {
Integer i1 = 200;
Integer i2 = 300;
Integer i3 = 100;
Integer i4 = 200;
System.out.println("i1 < i2 :"+i1.compareTo(i2));
System.out.println("i1 > i3 :"+i1.compareTo(i3));
System.out.println("i1 = i3 :"+i1.compareTo(i4));
}
结果:
i1 < i2 :-1
i1 > i3 :1
i1 = i3 :0
综上:
- 两个Integer比较的时候要用equals()方法
- int和Integer比较可以用 > < ==
- 比较大小可以使用compareTo()方法,x>y,返回1;x==y,返回0;x<y,返回-1