zoukankan      html  css  js  c++  java
  • Java包装类

    包装类的基本概念:

      Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[]数组或集合中的操作等等。

      为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。

      包装类均位于java.lang包,八种包装类和基本数据类型的对应关系如表8-1所示:

      在这八个类名中,除了Integer和Character类以外,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写而已。

          在这八个类中,除了Character和Boolean以外,其他的都是“数字型”,“数字型”都是java.lang.Number的子类。Number类是抽象类,因此它的抽象方法,所有子类都需要提供实现。Number类提供了抽象方法:intValue()、longValue()、floatValue()、doubleValue(),意味着所有的“数字型”包装类都可以互相转型。如图8-1和图8-2所示。

    图8-1 Number类的子类

    图8-2 Number类的抽象方法

    包装类的用途:

      1. 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如Object[]、集合等的操作。

          2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化!)。

    /**
     * 测试包装类Integer
     */
    public class Test {
        public static void main(String[] args) {
            //基本数据类型转换为包装类
           Integer a1 = Integer.valueOf(20);
           //包装类转换为基本数据类型
            int a2 = a1.intValue();
            //包装类可以和其他继承Number类的子类对象互相转换
            Double d1 = a1.doubleValue();
            Float f1 = a1.floatValue();
            //字符串转换为包装类
            Integer a3 = Integer.valueOf("30");
            //包装类对象转换为字符串
            String s1 = a3.toString();
        }
    }

    自动装箱和拆箱:

      基本数据类型和包装类对象转换时虚拟机会自动进行拆箱和装箱。

    //自动装箱
    Integer in1 = 123;  //等价于Integer in1 = Integer.valueOf(123);
    //自动拆箱
    int in2 = in1;  //等价于 int in2 = in1.intValue();

    前面说过将基本数据类型存储到Object[]数组或集合中的操作

    public class Test {
    
        public static void main(String[] args) {
            //Object是所有类的祖先类,所有类都默认继承自Object,所以Object类对象可以作为所有其他类对象的上转型对象来使用,自然也可以作为包装类对象的上转型对象
            Object object[] = {5,"你好",20.5};    //5自动装箱成为Integer,"你好"自动装箱为String,20.5自动装箱为Double
            for (Object temp:object) {
                System.out.println(temp.getClass());
            }
    
        }
    
    }
    //输出
    class java.lang.Integer
    class java.lang.String
    class java.lang.Double

     PS:Java中高类型转换为低类型要强制类型转换,上面是低类型转换为高类型(Integer->Object等),所以自动转换;但是Object->Integer要强制类型转换!类型转换不是装箱和拆箱操作,不要搞混乱了!

    包装类的缓存问题:

    //自动装箱
    Integer in1 = 123;  //等价于Integer in1 = Integer.valueOf(123);
    Integer in2 = 123;
    System.out.println(in1 == in2); //在Integer的源码里面,已经缓存了区间[-128,127]里面的Integer[]对象,在这个区间里面的对象直接返回缓存对象引用,不在区间范围就new一个新的Integer对象
    
    Integer in3 = 1234;
    Integer in4 = Integer.valueOf(1234);
    System.out.println(in3 == in4);
  • 相关阅读:
    SQL SERVER 2012修改数据库名称(包括 db.mdf 名称的修改)
    vmware三种网络模式
    指针
    linux 中 开放端口,以及防火墙的相关命令
    数据库备份的脚本,记录下,还需优化下
    遍历 目录的几种有效办法
    转。git 乌龟的使用安装
    centos 时区正确,时间不对
    locate
    从 零开始 无差错 装好nginx+PHP
  • 原文地址:https://www.cnblogs.com/chiweiming/p/11302322.html
Copyright © 2011-2022 走看看