• 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

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

  • 相关阅读:
    判断正整数的正则表达式
    ALL、ALLNOBLANKROW、VALUES、DISTINCT 去重的区别
    正则匹配双字节字符
    才子佳人小说研究.PDF
    第二性台版 第一卷 事实与迷思
    第二性 合卷本 横本.PDF
    架构的生态系 资讯环境被如何设计至今.PDF
    年羹尧奏摺专集(下).PDF
    第二性 合卷本 横本.EPUB
    小僧の神様・城の崎にて.PDF
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12445301.html
Copyright © 2020-2023  润新知