int和integer
(1)Integer是int的包装类,一般需要实例化实现,有拆箱和装箱;int是基本数据类型;
(2)Integer实际是对象的引用,指向new产生Integer对象;int是直接存储数据值;
(3)Integer的默认值是null;int的默认值是0
int和Interger地址空间
一:int是常量池
int a =8;
int b =8;
if(a==b)//ture
int a 相当于生成一个栈地址a.然后a地址指向了常量池中8;int b也生成一个栈地址,也指向了常量池8中,两个地址相同
二: Integer 是包装类,Integer变量实际上是对一个Integer对象的引用
Integer i =new Integer();
(1)两个integer,两个new分别生成两个堆地址空间
Integer i =new Integer(1);
Integer b =new Integer(1);
if(i==b)//false
(2)Integer 和int,int为常量池,new分堆地址空间,不是一个地址空间
int a =8;
Integer i =new Integer(8);
if(a==i)//false
自动装箱和自动拆箱
(1)自动装箱
Integer m =8;
8是属于基本数据类型,它是不能直接赋值给一个对象Integer的。但jdk1.5后你就可以进行这样的声明,自动将基本数据类型转化为对应的封装类型,成为一个对象以后就可以调用对象所声明的所有的方法。
(1)自动拆箱
Integer m =8;
m++;
对象时不能直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除
Integer n 和 new Integer
(1):Integer m和new Integer
Integer n装箱,将静态常量池中数组中存储的指向了堆中的Integer对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同。
Integer m = new Integer(8);
Integer n = 8;
System.out.print(i == j); //false
(1)Integer m和Integer n
对于两个非new生成的Integer对象,将Integer 拆解为常量,指向常量,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false。
而如果在-128~127之外的数,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。
Integer n = 8;
Integer m = 8;