黑马程序员技术交流社区
标题:
增强for循环的问题
[打印本页]
作者:
刘辉
时间:
2013-3-21 21:59
标题:
增强for循环的问题
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
arr.add("123");
arr.add("234");
arr.add("345");
for(int i=0;i<arr.size();i++){
String s=(String)arr.get(i);
System.out.println(s);
}
//for(String key:arr){
//System.out.println(key);
//}
}
}
//这里为啥我用普通for循环执行时就没问题,而用增强for循环时就出现错误了呢??
作者:
fighting
时间:
2013-3-21 22:38
这个没有什么错误啊,只是因为没有泛型,
所有会出现一个类型转化的不安全操作
作者:
小路飞
时间:
2013-3-21 22:47
给你改了下,再看看吧!
你用for增强时,没有强转导致错误!
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<String>();
arr.add("123");
arr.add("234");
arr.add("345");
// for(int i=0;i<arr.size();i++){
// String s = arr.get(i);
// System.out.println(s);
// }
for(String key:arr){
System.out.println(key);
}
}
}
复制代码
作者:
小路飞
时间:
2013-3-21 22:47
给你改了下,再看看吧!
你用for增强时,没有强转导致错误!
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<String>();
arr.add("123");
arr.add("234");
arr.add("345");
// for(int i=0;i<arr.size();i++){
// String s = arr.get(i);
// System.out.println(s);
// }
for(String key:arr){
System.out.println(key);
}
}
}
复制代码
作者:
谢洋
时间:
2013-3-22 00:09
这道题我好像昨见过,不知是不是你问的
在遍历集合时,增强for内部封装的是Iterator的取出方式,因为Iterator是一个泛型类型,其中取出方法的原型为:E next()
在没有使用泛型的情况下,返回值类型为Object
for(String key:arr) 相当于String key=it.next();但next的返回值类型为Object
作者:
仉钰
时间:
2013-3-22 08:57
在使用增强for 循环时
//for(String key:arr){..}
在语法上已经告诉编译器 arr中是 String 类型 但是你的ArrayList没有加上泛型 此时编译器只知道ArrayList中是默认的Object 类型
2个类型不一样 编译不通过
所以只要 定义ArrayList<String> 加上泛型 就可以正确执行了
或者修改 for(Object key:arr) 总之调整类型一样就可以
作者:
王龙涛
时间:
2013-3-22 09:40
谢洋 发表于 2013-3-22 00:09
这道题我好像昨见过,不知是不是你问的
在遍历集合时,增强for内部封装的是Iterator的取出方式,因为Iterato ...
学习了:)
作者:
王_强
时间:
2013-3-22 09:48
楼主,你好
对于你的问题,首先是要明白 根据报错的原因是对象类型转换异常
//for(String key:arr){
//System.out.println(key);
//}
这是你的代码,因为你在申明arr时没有用到泛型,所以arr集合 就把所有的对象作object来装入,当然用for增强取出时,也就是object对象了,所有你要这样写
//for(Object key:arr){
String str=(String)key;
//System.out.println(str);
//}
另解:
或是用泛型:
ArrayList<String> arr=new ArrayList<String>();
在申明集合时,我们就现在定义集合装入对象的类型,在编译时就会检查是否可以装入,一旦能编译装入,在运行时我们就可以不要强制装换了!
还有点小建议:
现在一般在使用集合时,都会结合使用泛型!
希望这些能给你帮助!
作者:
王龙涛
时间:
2013-3-22 09:57
高级for循环已经指定返回值类型为<String>,而ArrayList中默认的返回值类型为<Object>
造成了引用数据类型不明确,编译时就会出现不兼容类型的错误
只要在ArrayList类中定义<String>泛型,保持上下一致就OK了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2