Java中Arrays的asList()方法

Java中Arrays的asList()方法Java 中 Arrays 的 asList 方法可以将数组转为 List 但是 这个数组类型必须是引用类型的 如果是 8 中基本数据类型就不可以原因如下 引用别人的一篇文章 最近在用 Arrays 的 asList 生成的 List 时 List 元素的个数时而不正确 Java 代码 经多次测试 只要传递的基本类型的数组 生成 List 的元素个数均为 1 nbsp chara

最近在用Arrays的asList()生成的List时,List元素的个数时而不正确。

Java代码

//经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1  
char arrc = {‘a’,’b’};  
int  arrint = {1,2,4};  
Arrays.asList(arrc).size() ;//  结果为1;  
Arrays.asList(arrint ).size() ;//结果为1;  
   
//传递对象数组,元素个数正确。  
String arrstr = {“a”,”b”,”java”,”spring”,”hadoop”,”lucene”};  
Arrays.asList(arrstr ).size() ;//结果为6;  
跟源码:

Java代码  

  public static

List

asList(T… a) {  

 return new ArrayList

(a);  

}  
继续跟,Arrays的私有内部类ArrayList  (没搞明白,为什么这里也起名为ArrayList)

private final E[] a;  
  
ArrayList(E[] array) {  
           if (array==null)  
               throw new NullPointerException();  
    a = array;  
}  
  
public int size() {  
    return a.length;  
}  
发现问题出在java5 的可变参数上。于是写了demo,测试。

public class TestArray {  
    PrintStream out = System.out;  
    @Test  
    public void array() {  
        char[] arrc = {‘a’,’b’,’c’,’d’,’e’};  
        out.println(“传递char数组:”);  
        print(arrc);  
        out.println(“直接传递:”);  
        print(‘a’,’b’,’c’,’d’,’e’);  
        out.println(“—————————-“);  
          
        int[] arri = {1,2,3,4,5,6,7};  
        out.println(“传递int数组:”);  
        print(arri);  
        out.println(“直接传递:”);  
        print(1,2,3,4,5,6,7);  
        out.println(“—————————-“);  
          
        Integer[] arrInt = {1,2,3,4,5,6,7};  
        out.println(“传递Integer数组:”);  
        print(arrInt);  
        out.println(“直接传递:”);  
        print(1,2,3,4,5,6,7);  
        out.println(“—————————-“);  
          
        String[] arrs = {“a”,”b”,”c”,”d”,”e”};  
        out.println(“传递String数组:”);  
        print(arrs);  
        out.println(“直接传递:”);  
        print(‘a’,’b’,’c’,’d’,’e’);  
        out.println(“—————————-“);  
    }  
      
    public void print(Object…arr){  
        out.print(“内容:”+Arrays.toString(arr));  
        out.println(“\t\t数组长度:”+arr.length+” “);  
    }  
}  
输出结果为:

传递char数组:  
内容:[[C@defa1a]      数组长度:1   
直接传递:  
内容:[a, b, c, d, e]      数组长度:5   
—————————-  
传递int数组:  
内容:[[I@f5da06]      数组长度:1   
直接传递:  
内容:[1, 2, 3, 4, 5, 6, 7]        数组长度:7   
—————————-  
传递Integer数组:  
内容:[1, 2, 3, 4, 5, 6, 7]        数组长度:7   
直接传递:  
内容:[1, 2, 3, 4, 5, 6, 7]        数组长度:7   
—————————-  
传递String数组:  
内容:[a, b, c, d, e]      数组长度:5   
直接传递:  
内容:[a, b, c, d, e]      数组长度:5   
—————————-  
java 5 可变参数,直接传递值与传递数组处理的机制不太相同。

如果直接传递数组,基本类型数组将被视为一个对象而不会被解析成数组,如果直接传递参数将能正常解析。因此传递基本类型数组时强烈建议转为其封装类对象的数组  int ->Integer ,long->Long …………。(未对其封装)

这样写就很清楚了吧
public static void main(String[] args) {
  int[] intArray = {1,2,3};
  List

myList = Arrays.asList(intArray);

  System.out.println(myList.size());
  System.out.println(myList.get(0).length);

}

大概明白了:定义:

public static

List

asList(T… a) { 

return new ArrayList

(a); 

}

这个T必须是对象类型。好比我们不能new ArrayList

只能new ArrayList

原文地址:http://www.java3z.com/cwbwebhome/article/article8/83483.html?id=4483







































































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212053.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午8:57
下一篇 2026年3月18日 下午8:57


相关推荐

  • Shell字符串拼接(连接、合并)

    Shell字符串拼接(连接、合并)Shell 字符串拼接 连接 合并

    2026年3月19日
    3
  • java中dao层和service的关系(web基础知识有哪些)

    参考来源:http://www.xuebuyuan.com/2153333.html 1.Action/Service/DAO简介:Action是管理业务(Service)调度和管理跳转的。Service是管理具体的功能的。Action只负责管理,而Service负责实施。DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊、动态、子查询都可以。但是无论多么复杂的查

    2022年4月12日
    95
  • URLEncoder转换字符串问题

    URLEncoder转换字符串问题今天在开发过程中遇到了一个坑,关于使用URLEncoder去encode字符串的问题,是解析一个下载地址,由于下载文件名中含有空格,导致encode之后所有空格变成了“+”,url拼接自然就出错了,下载地址相应不到报了404异常,由于之前没接触过这方面的事情,也算是给自己挖了一个小坑,特此记录一下。这段是业务背景,不想看的直接跳到下一段看解决办法哈。大概是这样,公司网站原本下载各种附件的地…

    2022年6月29日
    30
  • java面向对象最全入门笔记(通俗易懂,适合初学者)

    java面向对象最全入门笔记(通俗易懂,适合初学者)一 为什么使用面向对象前言 面向对象的三大特征封装 Encapsulatio 继承 Inheritance 多态 Polymorphism 编程思想 面向过程 做某件事情都需要自己亲历亲为 按照步骤去完成面向对象 做某件事情不需要自己亲历亲为 只需指定特定的对象去完成即可 1 现实世界就是由对象组成的 如下图 万物皆对象 不是单指女朋友也不是单指男朋友哈 2 面

    2026年3月16日
    2
  • stat 函数_stat函数返回值

    stat 函数_stat函数返回值stat函数讲解(转) 表头文件:   #include         #include定义函数:    intstat(constchar*file_name,structstat*buf);函数说明:    通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值:    执行

    2022年8月21日
    14
  • 程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器

    程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器前言(欢迎评论区列出你认为牛逼的开发神器~)本文来自MeloDev的投稿,他的博客地址:http://www.jianshu.com/u/f5909165c1e8程序员必备简捷开发辅助工具总结写在前面:工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马…

    2022年10月19日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号