参考:实体类中用基本类型好,仍是用包装类型好_ - 牵牛花 - 博客园html
int优缺点java
优势:sql
1.用于Bean的时候,有默认值。好比本身拼接sql增长一个User时,会方便不少,不过如今都用ORM框架,因此这也不算是优势啦。数据库
2.两个值比较方便,使用 == 就能够了。缓存
缺点:框架
//错误 int a1 = (Integer) null; //错误 boolean x1 = (Boolean)null; //正确 Integer a2 = (Integer) null; Boolean x2 = (Boolean)null;
阿里巴巴开发手册中写的很明确,基本类型接收NULL值有NPE风险(java.lang.NullPointerException NPE 空值异常),并且默认值和NULL值不能传达同一种信息。spa
Integer优缺点code
优势:能够存放null,从数据库中查出值时可能会有nullhtm
缺点:Intege不能使用 == 比较相等。对象
Integer i1 = 127; Integer i2 = 127; Integer i3 = 128; Integer i4 = 128; /** * public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } */ System.out.println(" i1 == i2 "+(i1 == i2));//true System.out.println(" i3 == i4 "+(i3 == i4));//false int i6 = 127; int i7 = 127; int i8 = 128; int i9 = 128;
System.out.println(" i6 == i7 "+(i6 == i7));//true System.out.println(" i8 == i9 "+(i8 == i9));//true System.out.println(" i1 == i6 "+(i6 == i1));//true 与 int 类型的比较都是值比较 System.out.println(" i8 == i3 "+(i8 == i3));//true int i10 = new Integer(128); int i11 = new Integer(128); System.out.println(" i10 == i11 "+(i10 == i11));//true Integer i12 = new Integer(127); Integer i13 = new Integer(127); System.out.println(" i12 == i13 "+(i12 == i11));//false 对象地址比较
把int类型赋值给Integer类型。此时,int类型变量的值会自动装箱成Integer类型,而后赋给Integer类型的引用,这里底层就是经过调用valueOf()这个方法来实现所谓的装箱的。
把Integer类型赋值给int类型。此时,Integer类型变量的值会自动拆箱成int类型,而后赋给int类型的变量,这里底层则是经过调用intValue()方法来实现所谓的拆箱的。
Integer 和 int 进行比较分三状况
一、Integer与int类型的比较
这里就无所谓是谁与谁比较了,Integer == int与int == Integer的效果是同样的,都会把Integer类型变量拆箱成int类型,而后进行比较,相等则返回true,不然返回false。一样,拆箱调用的仍是intValue()方法。
二、Integer之间的比较
这个就相对简单了,直接把两个引用的值(便是存储目标数据的那个地址)进行比较就好了,不用再拆箱、装箱什么的。
三、int之间的比较
这个也同样,直接把两个变量的值进行比较。
值得注意的是:Integer之间的比较,JVM会自动缓存-128~127范围内的值,因此全部在这个范围内的值相等的Integer对象都会共用一块内存,而不会开辟多个;超出这个范围内的值对应的Integer对象有多少个就开辟多少个内存。