在工作中使用==埋下的坑这篇博文中,我们看到当使用基本类型的时候==是完全没有问题的,部分或者混合使用基本类型和装箱基本类型的时候,就可能出现问题了,那么我们可能会想基本类型和装箱基本类型有什么区别和联系哪?下面以int和Integer为例讲讲我的看法。int和Integer非常的像,所有的基本类型和其对应的装箱基本类型都非常的像,但是他们之间也是有区别的,他们之间的区别是什么哪?
为了明白他们之间的区别和联系,我们一起看看下面这段简单的代码和罗织在代码之间的结论吧!
1:TestIntMain.java——包含基本类型和装箱基本类型的区别和联系的结论注释
import java.util.ArrayList; import java.util.List; public class TestIntMain { public static void main(String [] args){ /** * 区别1: * int 声明的变量不能直接赋值为null * Integer 声明的变量能直接赋值为null */ // int _int_ = null;//不能直接赋null Integer _Integer_ = null;//可以直接赋null /** * 区别2: * int 声明的变量,存储就是一个数值,不能调用方法,它也没有方法可调用 * Integer 声明的变量,是一个对象,它有对应的变量、方法,它可以自由的调用 */ int _int = 99; Integer _Integer1 = new Integer(99); //一个整数值,不能调用方法 // System.out.println("_int type is : "+_int.getClass().getSimpleName()+"_int value is : "+_int.toString()); System.out.println("_int value is : "+_int); //一个对象,可以调用它的方法,属性等等 System.out.println("_Integer1 type is : "+_Integer1.getClass().getName()+" _Integer1 value is : "+_Integer1); /** * 自动装箱和拆箱 * 自动装箱:我的理解是将基本类型的变量,自动转换为装箱基本类型的对象的过程 * 自动拆箱:我的理解是将装箱基本类型的对象,自动转换为基本类型的变量的过程 * 1:这是在Java1.5发行版本中增加的功能 * 2:目的是为了模糊基本类型和装箱基本类型之间的区别,减少使用装箱基本类型的繁琐性 * 3:这样做也有一定的风险,比如:对于装箱基本类型运用==操作符几乎总是错误的,装箱的操作会导致高的开销和不必要的对象创建 */ int _int1 = new Integer(99);//对应的匿名对象变成了一个整数值,自动拆箱 int _int2 = _Integer1;//_Integer1对象变成了一个整数值,自动拆箱 // System.out.println("_int1 type is : "+_int1.getClass().getSimpleName()+"_int1 value is : "+_int1.toString()); System.out.println("_int1 value is : "+_int1); Integer _Integer = 99;//对应的整数值,直接给你对象也没问题,自动装箱 System.out.println("_Integer type is : "+_Integer.getClass().getName()+" _Integer value is : "+_Integer); // List<int> list_ = new ArrayList<int>(); List<Integer> list = new ArrayList<Integer>(); list.add(_int);//_int 此时相当于是一个Integer类型的对象了,自动装箱 list.add(_Integer); } }
1:TestIntMain.class——包含基本类型和装箱基本类型的自动装箱和拆箱的实现方式
import java.util.ArrayList; public class TestIntMain { public TestIntMain() { } public static void main(String[] args) { Object _Integer_ = null;//Integer _Integer_ = null; 编译后是这样的哦 byte _int = 99;//int _int = 99; 编译后是这样的哦 Integer _Integer1 = new Integer(99); System.out.println("_int value is : " + _int); System.out.println("_Integer1 type is : " + _Integer1.getClass().getName() + " _Integer1 value is : " + _Integer1); int _int1 = (new Integer(99)).intValue();//自动拆箱的实现方式 int _int2 = _Integer1.intValue();//自动拆箱的实现方式 System.out.println("_int1 value is : " + _int1); Integer _Integer = Integer.valueOf(99);//自动装箱的实现方式 System.out.println("_Integer type is : " + _Integer.getClass().getName() + " _Integer value is : " + _Integer); ArrayList list = new ArrayList(); list.add(Integer.valueOf(_int));//自动装箱的实现方式 list.add(_Integer); } }
时间: 2024-11-03 05:41:39