黑马程序员技术交流社区

标题: 大家进来看看 怎么改 [打印本页]

作者: 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 编辑

首先看报错信息:
  1. Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
  2.         at Test.main(Test.java:13)
复制代码
错误是ClassCastException:类型转换异常。
  1.                 al.add(1);//ArrayList集合里面都是存对象,自动装箱为Integer
  2.                 al.add(2);
  3.                 al.add(3);
复制代码
按照你之前的写法:
  1.                 while (it.hasNext()) {
  2.                         System.out.println((String) it.next()); /*这里是把Integer强转为String,当然会类型转换异常的错误.*/
  3.                 }
复制代码
按照你后面的写法:
  1.                 while (it.hasNext()) {
  2.                         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
代码如下:
  1. import java.util.*;
  2. public class Test{               
  3.       public static void main(String[] args){
  4.               List al =new ArrayList();
  5.          
  6.                al.add(1);
  7.               al.add(2);
  8.                al.add(3);
  9.               Iterator it=al.iterator();
  10.               while(it.hasNext()){
  11.                               System.out.println((Integer)it.next()); //我的问题在这行
  12. }
  13. }
  14. }
复制代码


因为你添加的元素自动装箱成了Integer




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2