• 避开基本类型数组转换列表陷阱


    先上一段代码:

    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的输入参数,否则会引起程序逻辑混乱。

    世上无难事,只怕有心人
  • 相关阅读:
    (整理)SQLServer_DBA 工具
    (转)winform Form 淡入淡出效果
    (转)SQLServer_T-SQL 语句执行时间的查询
    (整理)IIS 7 503 "service unavailable" errors
    (转载)C#中使用GUID
    (转载)SQL Server 2005 如何启用xp_cmdshell组件
    设计模式之适配器
    jaxb 组装及解析xml
    springMvc 简单搭建
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/shewu/p/5443505.html
Copyright © 2020-2023  润新知