java 集合中对象类型(个人见解)

先贴出面试题

以下代码运行结果是什么。

public class Test {
    public static void main(String args[]) {
        List Listlist1 = new ArrayList();
        Listlist1.add(0);
        List Listlist2 = Listlist1;
        System.out.println(Listlist1.get(0) instanceof Integer);
        System.out.println(Listlist2.get(0) instanceof Integer);
    }
}

结果:

true
true

解析

1.instanceof

instanceof是用来判断是否属于某个类型

2.基本类型的自动装箱

由于collection只能装入对象类型的数据,0是一个基本数据类型,在jdk1.5之前是不能装入collection中的,但是在jdk1.5之后加入了自动装箱与拆箱,在Listlist1.add(0);代码运行的时候回自动将0转化成Integer类型的对象放入集合中。

3.集合中对象的类型

在执行Listlist1.add(0);语句时,自动装箱操作将0转为Integer放入ArrayList中,由于没有指定泛型,所以ArrayList会将0以Object的形式在集合中保存,
执行List Listlist2 = Listlist1;时,将Listlist1指针指向的地址赋给Listlist2,他们指向的是同一块堆内存空间。
当执行Listlist1.get(0) instanceof Integer时,相当于先从集合中取出编号为0的数据,由于没有指定泛型,系统根据Listlist1.get(0).getClass()拿到数据的实际类型java.lang.Integer再和Integer进行判断。所以结果都是true。

结论

  • 集合不能装入基本类型数据,jdk1.5之后在装入基本类型数据时会自动包装成相应的对象类型。
  • 集合在底层都是以object对象来存储数据的,在取出数据时会将数据转化为指定泛型的类型,如果不指定泛型,则会转化成object.getClass()实际对象类型。
  • 集合之间赋值是将地址传递,并不是复制一个集合过去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值