Java-Integer和int的区别

134 阅读1分钟

1. int和Integer的区别

① 数据类型不同:int 是基础数据类型,而 Integer 是包装数据类型;
② 默认值不同:int 的默认值是 0,而 Integer 的默认值是 null;
③ 内存中存储的方式不同:int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象;
④ 实例化方式不同:Integer 必须实例化才可以使用,而 int 不需要;
⑤ 变量的比较方式不同:int 可以使用 == 来对比两个变量是否相等,而 Integer 一定要使用 equals 来比较两个变量是否相等。

2. Integer、new Integer()和int的比较

------两个new Integer()变量比较,永远是false
因为new生成的是两个对象,其内存地址不同
Integer i = new Integer(9);
Integer j = new Integer(9);
System.out.println(i == j);   //false


------Integer变量 和 new Integer() 变量比较 ,永远为 false
因为 Integer变量 指向的是java常量池中的对象,而 new Integer() 的变量指向堆中新建的对象,两者在内存中的地址不同
Integer m = 9;
System.out.println(m == i);  //false


------两个Integer 变量比较,如果两个变量的值在区间-128到127 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。
Integer n  = 9;
System.out.println(m == n);  //true

Integer k = 128;
Integer l = 128;
System.out.println(k == l);  //false



------int变量与 Integer、new Integer()比较时,只要两个的值是相等的,则为true.
因为包装类 Integer 和 基本数据类型int 比较时,java会自动拆包装为int ,然后进行比较,实际上就变为两个int变量的比较。
int u = 9;
System.out.println(i == u);  //true