zoukankan      html  css  js  c++  java
  • 集合不能存放基本类型

    一、集合只可以存储对象的引用,无法直接存储对象,当然也包括8种基本类型,在我们常见的操作中转港,我们可以看到集合是可以存放基本类型的,这是怎么回事呢?

    public class ColTest {
        public static void main(String[] args){
            ArrayList arr=new ArrayList();
            //int
            arr.add(1);
            //boolean
            arr.add(true);
            //string
            arr.add("hello");
           //lang
            arr.add(10L);
            //double
            arr.add(8.11);
            //float
            arr.add(8.11F);
            //char
            arr.add('c');
            //byte
            arr.add((byte)2);
            //short
            arr.add((short)2);
            for(Object o:arr){
                System.out.println(o.getClass());
            }
        }
    }

    执行结果为

    class java.lang.Integer
    class java.lang.Boolean
    class java.lang.String
    class java.lang.Long
    class java.lang.Double
    class java.lang.Float
    class java.lang.Character
    class java.lang.Byte
    class java.lang.Short

    可以得知,集合并没有直接存储基本类型,而是将基本类型转化为继承制Object的包装类,所以集合只能接受Object的子类作为值。

     二、那么问题出在哪里呢?

    通过源码我们可以看到,当使用add方法时,先是会添加一个容量(当然由于底层源自于数组,所以这个操作也很麻烦),再在该添加的位置复制

    但是,无论是什么类型的值都会被存放在Object数组中,所以无论是对象还是基本类型都会被转化为Object类型

    另外所有的基本类型强转为Object类型时,都会被转化为他的包装类,所以导致了这个现象。

  • 相关阅读:
    layer ----- 弹层
    php start
    node.js使用iconv-lite和zlib解决gzip压缩和gbk乱码
    AngularJS中promise的使用
    AngularJS中的$routeProvider
    AngularJS入门教程记录
    AngularJS中的$resource
    Javascript原型易错点记录
    触屏相关事件问题记录
    图片预加载
  • 原文地址:https://www.cnblogs.com/qqwhsj/p/10822113.html
Copyright © 2011-2022 走看看