当前位置: 代码迷 >> 综合 >> Java中Integer和int的区别
  详细解决方案

Java中Integer和int的区别

热度:45   发布时间:2024-02-10 22:28:47.0

int 是基础类型,Integer是引用类型,是int的包装类型。
int使用的是值传递。Integer使用的是引用传递。

java的基础类型都有对应的包装类型。

因为int是基础类型,所以int是分配在常量区。Integer是引用类型,所以它是分配在堆里面的。

类装载的时候,在类加载阶段。会将int类型的变量赋值为0 ,如果初始化阶段没有赋值的话,那么int类型的变量的初始值就是0 。 对于对象类型,在类加载阶段,会赋值为null, 所以在初始化阶段如果没有指定值的话,那么Integer类型的变量初始的值就是null。

使用int类型有3种方式

//直接声明变量赋值。
int i = 1;
//这里由于自动装箱拆箱,所以可以直接将值赋值给对象。
//这里编译过后会变成 Integer i1 = Integer.valueOf(1);
Integer  i1 = 1;//使用new创建对象。
Integer i2 = new Integer(1);

int和Integer的对比如下

public static void main(String[] args) {int i1= 1;Integer i2 = 1;Integer i3 = new Integer(1);//true 因为i2会被自己拆箱成1System.out.println( i1 == i2);//true 因为i3会被自己拆箱成1System.out.println( i1 == i3);//false 因为Integer会自动在类加载的时候,自动生成一个Integer数组,保存着 -128 ~ 127 的对象//i2 会被编译成 i2= Integer.valueOf(1); valueOf方法会去获取预先缓存的 -128 ~ 127 对象。// 所以这里判断的是 i2(这个在加载阶段就创建的Integer对象) 和 i3(在执行阶段才创建的对象) 是否同一个对象,当然不是同一个对象。System.out.println( i2 == i3);Integer i4 = 2;Integer i5 = 2;//true 因为i4 和 i5 都是Integer类缓存的对象。System.out.println(i4 == i5);Integer i6 = 128;Integer i7 = 128;//false ,因为i6 和 i7都大于127。所以是new出来的对象,而不是缓存的对象。System.out.println(i6 == i7 );Integer i8 = new Integer(3);Integer i9 = new Integer(3);//false i8 和 i9都是new出来的对象,是不同的引用。所以是falseSystem.out.println(i6 == i7 );//true  equals方法是获取int值进行对比。 他们的值都是3 所以是trueSystem.out.println(i8.equals(i9));
}