zoukankan      html  css  js  c++  java
  • Java--自动装箱与拆箱

    对象包装器是不可变的,即一旦构造了包装器类,就不允许更改包装在其中的值。同时,对象包装器类还是 final,因此不能定义他们的子类。

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

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

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

    在很多情况下,容易有一种假象,即基本类型与他们的对象包装器是一样的,只是他们的相等性不同。大家知道,== 运算符也可以应用于对象包装器对象,只不过检测的是对象是否指向同一个存储区域,因此,下面的比较通常不会成立:

          Integer a = 1000;

          Integer b = 1000;

          if(a == b) ...

    然而,Java 实现却有可能让它成立。如果将经常出现的值包装到同一个对象中,这种比较就有可能成立。这种不确定的结果并不是我们所希望的。解决这个问题的办法是在两个包装器对象比较时调用 equals 方法。

    自动装箱规范要求 boolean、byte、char <= 127,介于 -128 ~ 127 之间的 short 和 int 被包装到固定的对象中。例如,如果在前面的例子中将 a 和 b 初始化为 100,对他们进行比较的结果一定成立。

    装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时,插入必要的方法调用。虚拟机只是执行这些字节码。

  • 相关阅读:
    rpm离线安装 ZZ https://www.cnblogs.com/Dev0ps/p/11027550.html
    系统记录一下用snmp获得华为/华3 设备cpu使用率的问题
    iperf3使用介绍
    ubuntu16上安装mysql并配置
    etcdserver: mvcc: database space exceeded的处理
    zz kafka的一些细节信息
    ZZ kafka性能问题调优
    日志处理时,遇到多种re表达式轮循匹配的高性能处理方式
    zz 微信小程序image组件中aspectFill和widthfix模式应用详解
    单元格移动时高亮
  • 原文地址:https://www.cnblogs.com/microcat/p/6772786.html
Copyright © 2011-2022 走看看