int和Integer的比较详解

说明:
int为基本类型,Integer为包装类型;
装箱: 基本类型---> 包装类型 int ---> Integer 底层源码: .intValue()
拆箱: 包装类型---> 基本类型 Integer ---> int 底层源码: Integer.valueOf()

  1. 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);      // true
  1. Integer和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
posted @ 2021-02-20 15:42  小小程序猿-DB  阅读(388)  评论(0)    收藏  举报