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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunshine9091 中级黑马   /  2014-8-7 07:55  /  3139 人查看  /  37 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请看下面的代码,在while遍历里,为什么还要做String s = (String)it.next()呢,我存的本来就是字符串啊,怎么还要强转呢???


public static void main(String[] args)
        {
                ArrayList al = new ArrayList();

                al.add("abc356");
                al.add("abc3543");
                al.add("abc126");
                al.add("abc0897");

                Iterator it = al.iterator();
                while (it.hasNext())
                {
                        String s = (String)it.next();

                        System.out.println(s+"...."+s.length());
                }
               
        }

37 个回复

倒序浏览
你把强转(String)去掉 看下报错 ,就明白了。集合里存的Object对象 赋值给String对象,要强转。编译时,谁知道你里面存的什么呀

点评

不解释 要么强转 要么泛型  发表于 2014-8-7 08:37
你的意思是在迭代器里的数据类型还不确定吗?  发表于 2014-8-7 08:16
回复 使用道具 举报
你存入是字符串,但是存入arraylist之后变为object,再次取出后就是object,肯定需要强制转换;
arraylist中的元素都是以object存储的吧。

点评

这个貌似靠谱,谢谢啊!  发表于 2014-8-7 08:17
回复 使用道具 举报
集合没有指定泛型,所以存入的都是Object,所以OBject要强转
回复 使用道具 举报
加上泛型就好了,集合不加泛型存进去会自动装箱,变成Object,在你取的时候不会自动拆箱,要手动去强转成String才能赋值,除非你直接输出
回复 使用道具 举报
import java.util.*;


public class Test_1 {

        public static void main(String[] args)
        {
                ArrayList<String> a1 = new ArrayList<String>();
                a1.add("abc123");
                a1.add("abc456");
                a1.add("abc789");
                for(Iterator<String> it=a1.iterator();it.hasNext();)//在此声明String类型
                {
                        String s = it.next();
                        System.out.println(s+"...."+s.length());
                }
        }

}
这样就不用强转了。

点评

牛X!  发表于 2014-8-7 09:25
回复 使用道具 举报
集合里存的Object对象 赋值给String对象,要强转
回复 使用道具 举报
加入泛型,一切搞定。。。。。

点评

额!泛型很强大啊!  发表于 2014-8-7 09:27
回复 使用道具 举报
给编译器看的
回复 使用道具 举报
李章敏 发表于 2014-8-7 09:14
集合里存的Object对象 赋值给String对象,要强转

嗯,现在明白了!
回复 使用道具 举报
如果你用eclipse编写一下。就可以看到.后弹出的提示里。it.next返回的是Object
回复 使用道具 举报
你知道,并不代表编译器就知道啊,它只按规矩办事,it.next()返回的是Object类型,而你需要的是String 类型,所以需要强转
回复 使用道具 举报
顶顶顶顶
回复 使用道具 举报
看看了评论,学习了
回复 使用道具 举报
李文方 发表于 2014-8-7 09:38
你知道,并不代表编译器就知道啊,它只按规矩办事,it.next()返回的是Object类型,而你需要的是String 类型 ...

哎呀,这位美女,你要进哪期呀,无情搭讪。
回复 使用道具 举报
路过~~~   
回复 使用道具 举报
草鱼狂飙 发表于 2014-8-7 08:11
你存入是字符串,但是存入arraylist之后变为object,再次取出后就是object,肯定需要强制转换;
arraylist ...

嗯嗯,说的很对,就是这样的。
回复 使用道具 举报
List里面取出的都Object类型,你直接赋值给String类型,肯定不行,得强制转换
回复 使用道具 举报
Hey丶小黑 发表于 2014-8-7 11:08
哎呀,这位美女,你要进哪期呀,无情搭讪。

哈哈哈哈。。。
回复 使用道具 举报
F@C 中级黑马 2014-8-7 14:45:03
20#
进来学习
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马