zoukankan      html  css  js  c++  java
  • 对象包装器与自动装箱

    有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。通常,这些类称为包装器(wrapper)。这些对象包装器拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前六个类派生于公共的超类Number)。对象包装器是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,对象包装器还是final,因此不能定义他们的子类。

    假如想定义一个整型数组列表。而尖括号中的参数不允许是基本类型,也就说,不允许写成ArrayList<int>。这里就用到了Integer对象包装器。我们可以声明一个Integer对象的数组列表:

    ArrayList<Integer> list = new ArrayList<>();

    由于每个值分别包装在对象中,所以ArrayList<Integer> 的效率远远低于int[] 数组。因此,应该应用于构造小型集合,其原因是 此时程序员操作的方便性要比执行效率更加重要。

    list.add(3);

    将自动变换为

    list.add(Integer.valueOf(3));

    这种变换被称为自动装箱。

    相反的,当将一个Integer对象赋值给一个int时,将会自动的拆箱。

    int n = list.get(i);

    编译器自动翻译为

    int n = list.get(i).intValue();

    甚至在算数表达式中也能自动地装箱和拆箱。例如,可以将自增操作符应用于一个包装器引用:

    Integer n =3;

    n++;

    使用数值对象包装器还有另外一个好处。可以将某些基本方法放置在包装器中,例如,将一个数字字符串转换成数值。

    int x = Integer.parseInt(s);

  • 相关阅读:
    CAN总线(1)--初探(更新中)
    无约束时钟导致综合实现效果不一致
    推荐几本FPGA书籍(更新中)
    Ubuntu下配置支持Windows访问的Samba共享
    svn 节点处冲突 解决
    clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别
    Linux入门,这七大习惯得有!
    Ubuntu硬盘空间不足时,添加硬盘的方法
    让你快速学会Shell脚本
    printf与fprintf函数的区别
  • 原文地址:https://www.cnblogs.com/hengx/p/14594871.html
Copyright © 2011-2022 走看看