今天在写一个domain中一个User类的时候,发现视频中老师写的

private Integer id;

我就留意了一下,因为我平时写的都是

private int id;

就想知道这Integer 和int两个的区别,发现将id定义成Integer ,可以包含id为null这种情况,而如果设置成int基本数据类型就会出现问题。后面是一些延伸------

Integer是int的包装类, int是基本数据类型

最主要的区别就是这句 一个是基本数据类型, 一个是类,

但其实其中隐含的细节很多,比如:

Integer的默认初始值是null,而int的默认初试值是0。
Integer变量必须先实例,int变量则可以直接使用
因为Integer是包装的类, 所以自带很多方法可以使用, (方法表附在最后),

而int是基本数据类型只能做一些基本的±*/=等操作 ,当二者交叉就会出现很多问题,

拆箱和装箱

装箱就是由基本数据类型封装成类的过程, 反而反之
什么时候会拆箱?——基本数据类型和引用数据类型做运算时
什么时候会装箱?——基本数据类型赋值给引用数据类型的时候

IntegerCache缓存

=200;
Integer b=200;
Integer a1=2;
Integer b1=2;
System.out.println(a==b); //false 1
System.out.println(a1==b1); //true 2

java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下:

public static Integer valueOf(int i){
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high){
return IntegerCache.cache[i + (-IntegerCache.low)];
}
return new Integer(i);
}

java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了