【JAVA自学笔记】1、自动装箱(拆箱)

来源:互联网 发布:java中des加密解密 编辑:程序博客网 时间:2024/05/22 03:04

         Java作为一种非常纯净的面向对象编程语言,我们接触的几乎全是各种对象,对象包括数据和对数据的操作方法。但是为了编程方便,还是引入的8个基本数据类型(long、int、short、byte、double、float、char、boolean)。但是为了能够将这8个基本数据类型看作是对象,java为每一个基础数据类型引入了相对应的包装类(wrapper class)。这个包装类是不可变的,一旦将一个基本数据类型包装好,就不允许改变。同时,包装类还是final类,不能有继承自包装类的子类。

(1)

       Integer i = new Integer(3);//创建一个Integer包装类

       Integer n = 3;//自动装箱机制将int类型3包装成Integer类型,同样创建了一个包装类

       如果一个基础数据赋给一个对应的包装类的引用变量,自动装箱机制就创建一个对应的包装类取代基础数据类型,就好像包基础数据装入了对应的包装类中一样。

(2)

       Integer i = new Integer(3);

       int n = i;

       上面就是自动拆箱,当Integer类传递给基础数据类型n的时候,编译器会自动插入一条对象拆箱指令。

(3)

       Integer i = new Integer(3);

       i++;

       包装类型也可以进行算数计算,也是得益于自动装箱(拆箱)机制。

       Integer i = new Integer(300);

       Integer n = new Integer(300);

       return i == n;  //false

       包装类型的引用变量也可以进行==运算,只不过他们是对象,比较的是看他们是否引用同样一个对象(指向的存储区域是否相同),而不像基础数据是进行值比较。所以,上例中i==n返回的是false

        Integer i = new Integer(3);

       Integer n = new Integer(3);

       return i == n;  //true

       同上例不同的是,这里包装的基础数据是3,而不是300,返回的类型就是true,说明这里包装类引用变量i和n指向同一个对象。在java的自动装箱规则中,介于-128—127的整型,统统被包装到固定对象中,所以这里的i和n引用的对象乃是同一个对象。

(4)

       基础类型对应的包装类存在的意义是什么?

       类包含的除了实例变量,更重要的是方法,能对变量按照一定方式进行处理的方法。自然,包装类的存在也是为了与基础数据密切相关的方法有一个存在的地方。通过调用相关包装类的方法能做一些有用的处理。例如,下面列举Integer包装类包含的方法。

        int intValue()

        返回Integer类对应int值

        static String toString(int i)

        static String toString(int i, int radix)

        将int i改写成radix进制的数,并以数字字符串形式输出

        static int parseInt(String s)

        static int parseInt(String s, int radix)

        将数字字符串以radix进制改写成数值,以int形式输出

        static Integer valueOf(String s)

        static Integer value Of(String s, int radix)

        将数字字符串s以radix进制改成int值,并包装成Integer类

原创粉丝点击