黑马程序员技术交流社区

标题: 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