黑马程序员技术交流社区
标题:
关于asList方法的问题
[打印本页]
作者:
java陈辉
时间:
2013-12-23 21:31
标题:
关于asList方法的问题
下面这段代码为什么第一个能够打印出list集合的内容?第二个却打印出的是一串字符串?这是为什么?求解释。
public class Test {
public static void main(String[] args) {
show();
}
public static void show(){
String arr[]={"a","b","c"};
List list=Arrays.asList(arr);
System.out.println(list); //这里能够正常打印结果
int nums[]={1,2,3};
list=Arrays.asList(nums);
System.out.println(list); //这里打印的却是一串字符串
}
}
作者:
绕世界流浪丶
时间:
2013-12-23 21:44
public class Test {
public static void main(String[] args) {
show();
}
public static void show(){
String arr[]={"a","b","c"};
List list=Arrays.asList(arr);
System.out.println(list); //这里能够正常打印结果
int nums[]={1,2,3};
list=Arrays.asList(nums);
System.out.println(list); //这里打印的却是一串字符串
}
}
复制代码
集合里面只能存引用类型
你那个数组是int类型的
它就转换成字符串类型了
作者:
一年之后
时间:
2013-12-23 22:04
本帖最后由 一年之后 于 2013-12-23 22:08 编辑
因为 你arr[]数组中传入的是对象,arr[]数组中的元素就直接转为集合中的元素,所以正常打印,
你的nums[]数组中的元素是基本数据类型,那么nums[]数组就会成为集合的中的元素,
也就是说你list集合中的元素只有一个,就是nums,所以打印的是nums指向的地址值。
还有一点就是字符串本身就是个例外,如果你arr[] 数组里传的是 不是字符串,那么他也会打印地址值
你向集合中存储的对象就是存的对象指向的地址值。
作者:
恨死我了
时间:
2013-12-24 09:25
因为当基本类型数组转为一个对象时,一维数组会把这个数组转为一个对象,只有二维数组才是一个对象的数组,当你把int改为integer时也就是一组对象时就正常了.
对于1.5新特性来说 这是可变参数,那么传入的arr不会被解开 整个数组被当做list中的一个元素.这里如果是Integer[]应该就可以了.
作者:
高丽华
时间:
2013-12-24 11:48
我给你举个例子:
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String[] str = {"abc","bcd"};
int[] a = {1,2,3};
int[][] b={{1,2,3},{1,2,3}};
System.out.println(Arrays.asList(str));//[abc, bcd]
System.out.println(Arrays.asList(a));//[[I@152b6651]
System.out.println(Arrays.asList(b));//[[I@544a5ab2, [I@5d888759]
}
}
1,如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
例如:int [] arr={2,3,4};它变成集合的形式是:List<int[]>list=Arrays.asList(arr);
2,如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
例如:Integer[]arr={7,6,5};它变成集合的形式是:List<Integer]>list=Arrays.asList(arr);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2