说明:
int为基本类型,Integer为包装类型;
装箱: 基本类型---> 包装类型 int ---> Integer 底层源码: .intValue()
拆箱: 包装类型---> 基本类型 Integer ---> int 底层源码: Integer.valueOf()
int和Integer
// int和Integer比较时,Integer回自动拆箱为基本类型,相当于值的比较 int a = 199; Integer b = 199; Integer c = new Integer(199); System.out.println(a == b); // true System.out.println(a == c); // trueInteger和Integer比较(其中包括非new生成的Integer变量和new Integer()生成的变量)
// 1. 两个通过new生成的Integer变量永远是不相等的,因为new生成的是两个对象,其内存地址不同 Integer i = new Integer(199); Integer j = new Integer(199); System.out.println(i == j); // false // 2. 如果使用equals比较值的大小,是相等的 System.out.println(i == j); // true /* * 3. 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false; * 当值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同; * 当值不在-128~127之间时,非new生成Integer变量时,java API中最终会按照new Integer(i)进行处理,最终两个Interger的地址同样是不相同的。 */ Integer l = 199; System.out.println(i == l); // false /* * 4. 两个非new生成的Integer变量比较 * 当变量值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,相等; * 当变量值不在-128~127之间时,非new生成Integer变量时,java API中最终会按照new Integer(i)进行处理,最终两个Interger的地址同样是不相同的。 */ Integer m = 199; Integer n = 100; Integer k = 100; System.out.println(n == k); // true System.out.println(m == l); // false