黑马程序员技术交流社区
标题:
大家进来看看 怎么改
[打印本页]
作者:
wyf880204
时间:
2013-12-27 22:19
标题:
大家进来看看 怎么改
import java.util.*;
public class Demo{
public static void main(String[] args){
List al =new ArrayList();
al.add(1);
al.add(2);
al.add(3);
Iterator it=al.iterator();
while(it.hasNext()){
System.out.println((String)it.next()); //我的问题在这行
}
}
}
这个是失败的 (String)it.next()是调用了String的构造方法 我在哪里添加一个构造方法 可以编译正确??
将那行换成System.out.println(String.valueOf(it.next()));可以输出 又有一个问题 没有定义String类 怎么会编译通过呢
作者:
yaohsieh
时间:
2013-12-28 00:34
本帖最后由 yaohsieh 于 2013-12-28 00:37 编辑
首先看报错信息:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at Test.main(Test.java:13)
复制代码
错误是ClassCastException:类型转换异常。
al.add(1);//ArrayList集合里面都是存对象,自动装箱为Integer
al.add(2);
al.add(3);
复制代码
按照你之前的写法:
while (it.hasNext()) {
System.out.println((String) it.next()); /*这里是把Integer强转为String,当然会类型转换异常的错误.*/
}
复制代码
按照你后面的写法:
while (it.hasNext()) {
System.out.println(String.valueOf(it.next()));/*这里是调用了String类下面的静态方法valueOf(Object obj),返Objec参数的字符串表示形式.返回类型是String,运行不会出错,这里完全不用你前面定义String.*/}
复制代码
作者:
其LovE斤
时间:
2013-12-28 01:16
呃,怎么说呢。。
(String)it.next()是调用了String的构造方法 我在哪里添加一个构造方法 可以编译正确??
首先这一句,你根本没有调用String的构造方法。这是强制类型转换。强转对类型的匹配是有限制的。
代码输出的话:可以有三种方法。
最简单的 是 System.out.println(it.next().toString());
或者 System.out.println(it.next()+"");
麻烦点: System.out.println((Object)it.next()); //这是为 Integer和String搭建了一个桥梁。
作者:
kun1990
时间:
2013-12-28 10:09
代码如下:
import java.util.*;
public class Test{
public static void main(String[] args){
List al =new ArrayList();
al.add(1);
al.add(2);
al.add(3);
Iterator it=al.iterator();
while(it.hasNext()){
System.out.println((Integer)it.next()); //我的问题在这行
}
}
}
复制代码
因为你添加的元素自动装箱成了Integer
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2