int类型和Integer(理解基本数据类型和引用数据类型在内存中的存储方式)
一、int是基本数据类型,Integer是包装类,是继承了抽象类Number的引用数据类型;
二、int作为基本数据类型不能被赋值为null,Integer可以被赋值为null;
三、两个int类型的变量进行比较是值的比较;
从java 5.0以后有了autoboxing功能,int类型的变量和Integer类型的变量进行比较时,Integer会进行自动拆箱,也就是说int类型和Integer类型可以直接用==进行值的比较;
两个Integer类型的变量进行比较时,情况就稍微复杂。请看如下举例:
-
Integer i1 = 100, i2 = 100, i3 = 150, i4 = 150;
-
Integer i5 = new Integer(100);
-
Integer i6 = new Integer(100);
-
Integer i7 = new Integer("100");
-
Integer i8 = Integer.parseInt("100");
-
System.out.println(i1 == i2);//true
-
System.out.println(i3 == i4);//false
-
System.out.println(i1==i5);//false
-
System.out.println(i6==i5);//false
-
System.out.println(i1==i7);//false
-
System.out.println(i8==i7);//false
-
System.out.println(i1==i8);//true
-
System.out.println(i5.equals(i6));//true
-
System.out.println(i3.equals(i4));//true JVM中一个字节以下的数据([-128,127])在启动时自动加载进内存,所以除非用new Integer()创建的对象,否则都是同一个对象。以上举例中i5和i6直接用==进行比较时,实际上比较的是两个不同对象的地址,而不是比较的两个对象的值大小。如果要比较两者的大小要用Integer重写的Object的equals()方法。