一、简单聊一下Integer
Integer是Java 8大包装类之一(wrapper):也就是基本数据类型int的包装类,有些情况下需要把基本数据类型转成类,这就是包装类的作用了;
了解其他包装类:https://blog.csdn.net/qq_44715943/article/details/116331282
二、Integer类常用方法
其中用的多的:
- tobinarySring、parseInt、valueof、compare、toString
三、 自动装箱拆箱
自动装箱拆箱在集合中用的比较多:
public static int testIntAddInMap(int i){
Map map=new HashMap();
map.put(i,i);
return 0;
}
我们知道如果不用泛型,集合中默认都会将元素转成Onject类型,其中针对基本数据类型int:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
介于-128-127的int、byte直接指向方法区的常量池中存放的包装类对象。
否则,还是创建新的Integer对象。
涉及到Integer与Int进行计算时:Integer会调用其内部的initValue获取int值,如此才能与int进行计算。
四、关于Integer与new Integer与Int以及equals和==
equals: 比较的是所引用对象中的值,可以被重写。
==:比较的是所引用对象的内存地址,或者是基本数据类型的值。
Integer i1 = 10;//this is autoboxing
Integer i2 = 10;
Integer i3 = 20;
Integer i4 = new Integer(10);
Integer i5 = new Integer(10);
Integer i6 = new Integer(20);
System.out.println(i1 == i2);//true (1)
System.out.println(i3 == i1 + i2);//true (2)
System.out.println(i1 == i4);//false (3)
System.out.println(i4 == i5);//false (4)
System.out.println(i6 == i4 + i5);//true (5)
System.out.println(20 == i4 + i5);//true (6)
public void testInteger(){
//Integer
//Integer
int a=2;
int aa=222;
Integer bb=222;
Integer d=2;
Integer b=1;
Integer c=new Integer(1);
System.out.println(aa==bb);//ture 自动拆箱
System.out.println(a==d);//ture
System.out.println(a==b+c);//ture 自动拆箱
System.out.println(b==c);//false
}
}