黑马程序员技术交流社区
标题:
ArrayList一点困惑
[打印本页]
作者:
冯鹏飞
时间:
2011-7-29 08:28
标题:
ArrayList一点困惑
我将整数添加到arraylist中,在用for(int i:arraylist)为何会提示错误,存入的不就是int类型的吗?由于用的手机就不贴代码了,我说的应该能让人明白吧。
作者:
匿名
时间:
2011-7-29 08:38
我弄怎么就没错了:[code=java]public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(4);
list.add(5);
list.add(7);
for (Integer integer : list) {
System.out.println(integer);
}
}[/code]
作者:
匿名
时间:
2011-7-29 10:04
标题:
回复 沙发 的帖子
那可能你用的是Object i:arraylist,添加的元素是int型的,输出时为什么就不可以呢?
作者:
匿名
时间:
2011-7-29 10:28
public static void main(String[] args) {
ArrayList arraylist = new ArrayList();
arraylist.add(1);
arraylist.add(2);
arraylist.add(3);
for(Object i:arraylist) {
System.out.println(i);
}
}
//上面的代码是对的;
但是如果你写成for(int i:arraylist)就错了。第一,你说你添加的元素是Int型,你知道是int型,但是系统程序不知道啊。如果你指定为integer型的,就像陈承写的,指定了ArrayList的数据类型为Integer(List<Integer> list = new ArrayList<Integer>())。第二,ArrayList添加进去的是指定类型的对象,是Object,但是int不是对象型啊。
作者:
匿名
时间:
2011-7-29 11:39
集合中添加的内容是对象。基本类型不是对象,不属于Object。但此时jvm可以用自动装箱来完成,将其添加进去(添加进去的是对象)。[code]public class IterateTest {
public static void main(String args[]) {
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
for (int i : al) {
System.out.println(i);
}
}
}[/code]上面的正确,上面的虽然装进去的是基本类型。但是系统已经帮你将其自动装箱成了Integer对象了,当用foreach循环的时候,系统又会自动将其拆箱为int类型。但是,下面的就是错误的。[code]public class IterateTest {
public static void main(String args[]) {
ArrayList al = new ArrayList();
al.add(1);
al.add(2);
for (int i : al) {
System.out.println(i);
}
}
}[/code]再不指定泛型类型的情况下,集合默认装的是Object类型。在迭代集合时,其中的元素是Object类型,int属于基本类型,不是Object !所以此时连编译器都不会通过。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2