zoukankan      html  css  js  c++  java
  • 避开基本类型数组转换列表陷阱

    先上一段代码:

    import java.util.Arrays;
    import java.util.List;
    
    
    public class demo5 {
         public static void main(String[] args) {
            int[] i={1,23,25,41,93,11};
            List list=Arrays.asList(i);
            System.out.println(list.size());
            
            
        }
    }

    你会觉得这个打印出来的结果是6,但事实上结果是1,这是为什么呢?我们先来看一段Arrays.asList()代码:

    public static <T> List<T> asList(T... a){
                   return new ArrayList<T>(a);
              
    }

    asList方法输入的是一个泛型变长参数,我们知道基本类型是不能泛型化的,也就是说8个基本类型都不能作为泛型参数,要想作为泛型参数,就必须使用包装类。而这个例子是一个整型的数组·,在java中,数组是一个对象,他是可以泛型化的,所以例子中是吧一个数组传给了泛型参数。所以转换后在List中就只有一个类型为int型的数组元素了。弄清了问题,我们这里就知道怎么修改了。通过把数组类型改为包装类就可以了。附代码:

    import java.util.Arrays;
    import java.util.List;
    
    
    public class demo5 {
         public static void main(String[] args) {
            int[] i={1,23,25,41,93,11};
            List list=Arrays.asList(i);
            Integer[] i2={1,23,25,41,93,11};
            List list2=Arrays.asList(i2);
            System.out.println(list.size());
            System.out.println(list2.size());
            
            
        }
    }

    结果:

    QQ图片20160428172930

    注意:原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱。

    世上无难事,只怕有心人
  • 相关阅读:
    MSCRM 2011 修改显示记录数
    医疗相关名词解析
    把图片中的文字转成文本
    自我介绍吧
    第三次作业
    第一次作业心得
    耿丹161第一次作业
    第二次作业
    C#常用函数表及Asp.net(C#)常用函数表
    C语言I博客作业02
  • 原文地址:https://www.cnblogs.com/shewu/p/5443505.html
Copyright © 2011-2022 走看看