javase基本数据类型与包装类型(装箱与拆箱、包装类型的优势)

1、java中的八种数据类型都有一个包装类型与之对应:

2、装箱与拆箱

(1)装箱与拆箱

装箱:把基本的数据类型转换为对应的包装类型

拆箱:把包装类型转换为对应的基本数据类型

(2)自动装箱与自动拆箱

 Integer i=1;//自动装箱
 int j=i;//自动拆箱

自动装箱:在上面的例子中实际上是在编译时期调用的Integer.valueOf()方法来装箱

自动拆箱:执行的是int j=i.intValue();

(3)手动装箱与手动拆箱

Integer i=Integer.valueOf(1);//手动装箱
int j=i.intValue();//手动拆箱

3、为什么有了基本数据类型还要有包装类型

java是一个面向对象的语言,基本数据类型不具有面向对象的特性(封装、继承、多态、抽象)。

(1)包装类型里面封装了很多属性和方法:

如:最大值、最小值

调用的是类中的静态方法:

public class Packaging {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);

    }
}

基本数据类型和对象的转换:

基本数据类型转化为对象,直接用Integer的构造方法:

Integer num1 = new Integer(123);
Integer num2 = new Integer("321");//用字符串转换

调用Integer的valueOf方法:

对象转化为基本数据类型:

(2)基本数据类型在没有初始化的时候为值0,包装类在没有初始化的时候为null:

基本数据类型:

定义学生的年龄为int类型:

    private String snum;
    private String sname;
    private int age;

未初始化学生的年龄,输出学生对象的信息:

        Student student=new Student("202019","zhai");
        System.out.println(student.toString());
Student{snum='202019', sname='zhai', age=0}

包装类型:

    private String snum;
    private String sname;
    private Integer age;
        Student student=new Student("202019","zhai");
        System.out.println(student.toString());
Student{snum='202019', sname='zhai', age=null}

(3)缓存区(Integer为例,其它封装类型也存在这种机制)

缓存值默认是-128~127 ,也就是说如果新创建的对象的值在此范围,就会直接从缓存区取出一个对象,否则,new一个Integer类型的对象。

源码:

   public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

测试:

        Integer num1=1;
        Integer num2=1;
        System.out.println(num1==num2);

        Integer num3=new Integer(2020);
        Integer num4=new Integer(2020);
        System.out.println(num3==num4);
true
false

减少创建新对象的次数,提高代码性能。

猜你喜欢

转载自www.cnblogs.com/zhai1997/p/12445301.html