Java中基本数据类型与包装类
java是面向对象的语言,但是Java中的基本数据类型不是对象,而且在调用方法的时候参数列表只能使用值传递,,此外Java的许多标准数据结构都是针对对象进行操作,为此Java为每种基本数据类型都提供了一个类,这些类就是包装类
除了int和char的数据类型其他的基本数据类型都和包装类只有首字母的差异
所有的数值型基本数据类型的包装类都继承于Number类中,剩下的基本数据类型继承于Object类中;而所有的包装类都在java.lang包下,所以可以直接使用
包装类的装箱和拆箱
在Number类存在valueOf()方法来获取包装类的对象(char和boolean的包装类也有这个方法),xxxValue()方法返回对象的数值(xxx表示变量的数据类型),将数值封装到包装类的过程称作装箱,而从包装类取出数值的过程称作拆箱:
public class Test{ public static void main(String[] args){ Integer it = Integer.valueOf(100); //将100传入it对象,装箱 int num = it.intValue(); //将it对象的值取出赋值到num,拆箱 System.out.println(num); //输出num } }
输出结果为100
从Java5开始,Java增加了自动装箱和自动拆箱。自动装箱是指只要是基本数据类型的对象,就将基本数据类型自动封装到对应的包装类的过程,不需要显性创建对象。自动拆箱是指当需要时自动提取已装箱的对象的数值的过程
public class Test{ public static void main(String[] args){ Integer it = 100; //等价于Integer it = Integer.valueOf(100); int num = it; //等价于int num = it.intValue(); System.out.println(num); //输出num } }
除了赋值这种简单的情况外,只要必须将基本数据类型转换为对象就会发生自动装箱,只要对象必须转换为基本数据类型就会发生自动拆箱,所以向方法传递参数或者从方法返回数值的时候就会有可能发生自动拆装箱:
public class Boxing { public static Integer boxing(Integer i){ i = Integer.valueOf(100); int num = i.intValue(); return i; } public static void main(String[] args) { int num = boxing(100); //传递参数的时候发生了自动装箱,接收方法返回值的时候发生了自动拆箱 } }