说明
虽然我知道在Integer的缓存范围外会使用new Integer()的方式来创建对象,但是没有去了解过Integer与int的比较,所以在做题的时候遇到了一些比较棘手的问题。
抛问题
先给你们一些关于Integer和int的比较题目,如果能打出来那么问题就应该不大了
Integer integer1 = new Integer(50);
Integer integer5 = new Integer(128);
Integer integer2 = Integer.valueOf(50);
Integer integer6 = Integer.valueOf(128);
Integer integer3 = 50;
Integer integer7 = 128;
int int4 = 50;
int int5 = 128;
System.out.println(integer1 == integer2); // f
System.out.println(integer5 == integer6); // f
System.out.println(integer6 == integer7); // f
System.out.println(integer6 == int5); // t
System.out.println(integer2 == integer3); // t
System.out.println(integer3 == int4); // t
System.out.println(integer1 == int4); // t
Integer与int比较的规律(自我总结)
-
规律一:如果Integer中被赋值的数字不在Integer.cache() 的缓存范围内的话,那么无论是new Integer (),还是Integer.valueOf(),还是 integer = xx;那么相比的时候,都是false。
-
规律二:如果Integer中被赋值的数字在Integer.cache() 的缓存范围内的话,那么 Integer.value()、integer = xx, 都相当于常量,内存位置是一样的,而new Integer()的位置与常量的位置不同。
-
规律三:如果Integer(无论是new Integer(),还是Integer.valueOf(),还是 integer = xx; 与int进行比较,那么无论是否在缓存范围内,Integer都会拆箱为int类型进行比较,那么肯定是比较值了。