Java支持的数据类型有哪些?什么是自动拆装箱?

java中的8种基本数据类型:boolean byte char short int float double long

自动拆装箱的问题引入:

由于在一开始学习java的时候,”万物皆对象“这种面向对象的看问题方式,时刻围绕在脑海中。因为静态的变量和基本数据类型不属于对象,但是由8种基本数据类型的自动装拆箱解决了基本数据类型不是对象。

在jdk1.5中引入了自动拆装箱的新特性,在jdk1.5之前,我们想要使用integer类中的方法,我们先要把int变量变成integer类型,可以通过new Integer(intNumber) 或者调用Integer.valueOf(intNumber)方法

自动装拆箱何时发生?

1、在调用方法时把基本数据类型作为参数,但是参数的类型是基本数据类型的包装类时。

在学习过javaSe基础之后,我们知道通过使用集合框架ArrayList或者Map来添加元素的时候,添加的是Object对象,在这里引入ArrayList.add()的源码:

  /**
     * Appends the specified element to the end of this list.
     *
     * @param e element to be appended to this list
     * @return <tt>true</tt> (as specified by {@link Collection#add})
     */
    public boolean add(E e) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
    }

对于源码的解读:首先我们来看看参数中的(E e),为什么是E ?而不是Object?因为E代表的是元素(集合中存储的是元素),我们平时在泛型中可以看到 <T extends List<T>> ,T 代表的是Type 类,再比如键值对中的Map<K,V>K 表示的是Key,V 表示的是Value。E K V 等泛型在使用该参数之前就已经限定好了类型,如果赋值给Object的话,就不用再进行强制类型转换了。

首先把数组的长度+1,这个操作会导致modCount加一,这个变量的作用就是记录当前数组被操作的次数,然后直接把参数传进来的对象赋值给上一次长度位置的元素。返回true表示添加成功

当我们调用ArrayList.add()方法的时候,可以直接调用

ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(10);

我们反编译这段代码:

public class AutoboxingTest
{

    public AutoboxingTest()
    {
    }

    public static void main(String args[])
    {
        ArrayList arrayList = new ArrayList();
        arrayList.add(Integer.valueOf(100));
    }
}

可以看到,编译器在编译的时候,检测到arrayList.add()需要的是Integer对象,所以把int类型自动装箱成Integer类型。

2、 给基本数据类型的包装类赋值为基本数据类型的时候。

我们还是以Integer和int类型的变量作为例子࿱

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值