A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pphdsny3 高级黑马   /  2012-8-16 16:38  /  2669 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. public class ArraysDemo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 int[] num = {1,4,21,3,44};
  9.                 String[] arr = {"xzc","qwe","sada"};

  10.                 List<Integer> list1 = Arrays.asList(num);
  11.                 List<String> list2 = Arrays.asList(arr);
  12.                 sop(list1);
  13.                 sop(list2);
  14.         }
  15.        
  16.         public static void sop(Object obj){
  17.                 System.out.println(obj);
  18.         }
  19. }
复制代码
疑惑:为什么Arrarys.asList()这个方法用在List<String> list2 = Arrays.asList(arr);没有任何问题,但是List<Integer> list1 = Arrays.asList(num);就会报错

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
(1) 该方法对于基本数据类型的数组支持并不好,当数组是基本数据类型时不建议使用
(2) 当使用asList()方法时,数组就和列表链接在一起了.
     当更新其中之一时,另一个将自动获得更新。
     注意:仅仅针对对象数组类型,基本数据类型数组不具备该特性
  1. import java.util.*;
  2. public class ArraysDemo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 int[] num = {1,4,21,3,44};//这是基本数据类型的数组,所以报错
  9.                 String[] arr = {"xzc","qwe","sada"};//而String是引用类型的数据,所以可以正常执行

  10.                 List<Integer> list1 = Arrays.asList(num);
  11.                 List<String> list2 = Arrays.asList(arr);
  12.                 sop(list1);
  13.                 sop(list2);
  14.         }
  15.         
  16.         public static void sop(Object obj){
  17.                 System.out.println(obj);
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 很给力!

查看全部评分

回复 使用道具 举报
int[] num = {1,4,21,3,44};   //你这里定义的是int类型
                String[] arr = {"xzc","qwe","sada"};

                List<Integer> list1 = Arrays.asList(num);  //而你用的泛型是Integer,所以不匹配
回复 使用道具 举报
import java.util.*;
public class ArraysDemo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Integer[] num = {1,4,21,3,44};//把这里改成Integer就ok了
                String[] arr = {"xzc","qwe","sada"};

                List<Integer> list1 = Arrays.asList(num);
                List<String> list2 = Arrays.asList(arr);
                sop(list1);
                sop(list2);
        }
        
        public static void sop(Object obj){
                System.out.println(obj);
        }
}
回复 使用道具 举报
import java.util.Arrays;
import java.util.List;
public class Edd {
        public static void main(String[] args) {
               

          int [] num = {1,4,21,3,44};
      String[] arr = {"xzc","qwe","sada"};
      
      List<int[]> list1 = Arrays.asList(num);
      sop(list1);
      List<String>  list2 = Arrays.asList(arr);
     
      sop(list2);
   
    }

public static void sop(Object obj){
      System.out.println(obj);
}
}
这样可以吧
回复 使用道具 举报
01.import java.util.*;

02.public class ArraysDemo {

03.

04.        /**

05.         * @param args

06.         */

07.        public static void main(String[] args) {

08.                // TODO Auto-generated method stub

09.                int[] num = {1,4,21,3,44};

10.                String[] arr = {"xzc","qwe","sada"};

11.

12.                List<Integer> list1 = Arrays.asList(num);//改为  List<int[]r> list1 = Arrays.asList(num);编译可以通过但是还是不会打印出具体的数值,应为 Arrays在对int型的数组调用asList方法时,不会那么好用,建议你不要使用,你可以具体的去查一查张老师的视频在讲解基础加强时 有讲到。

13.                List<String> list2 = Arrays.asList(arr);

14.                sop(list1);

15.                sop(list2);

16.        }

17.        

18.        public static void sop(Object obj){

19.                System.out.println(obj);

20.        }

21.}
复制代码

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 很给力!

查看全部评分

回复 使用道具 举报
李宁 中级黑马 2012-8-16 17:21:31
7#
引用下毕老师的讲课内容:正好针对你的问题
1.如果数组中元素都是对象,那么变成集合时,数组中的元素直接转换成集合中的元素。       因为字符串数组中的元素一进内存就全部变成对象,所以这些字符串对象就成为了集合中的对象。
2.如果数组中的元素是基本数据类型,那么会将该数组作为集合中的元素。      也就是说i整个int数组被作为了一个对象被传入了集合,所以它的泛型应该是int[],而不是Integer。

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 Bingo!

查看全部评分

回复 使用道具 举报
int 是原生类型,而integer是包装类型,integer里面包含了对 int原生类型的一系列操作,
所以编译器可以将integer当作 int 来使用,和int 不可以直接转化为integer类型。希望对你有用。
回复 使用道具 举报
谢谢大家,还是看的不仔细呀!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马