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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯鹏飞 黑马帝   /  2011-7-29 08:28  /  1760 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我将整数添加到arraylist中,在用for(int i:arraylist)为何会提示错误,存入的不就是int类型的吗?由于用的手机就不贴代码了,我说的应该能让人明白吧。

4 个回复

倒序浏览
黑马网友  发表于 2011-7-29 08:38:43
沙发
我弄怎么就没错了:[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:54
藤椅

回复 沙发 的帖子

那可能你用的是Object  i:arraylist,添加的元素是int型的,输出时为什么就不可以呢?
回复 使用道具 举报
黑马网友  发表于 2011-7-29 10:28:12
板凳
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:24
报纸
集合中添加的内容是对象。基本类型不是对象,不属于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 !所以此时连编译器都不会通过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马