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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wyf880204 中级黑马   /  2013-12-27 22:19  /  986 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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类 怎么会编译通过呢

3 个回复

倒序浏览
本帖最后由 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.*/}
复制代码





评分

参与人数 1黑马币 +1 收起 理由
wyf880204 + 1 很给力!

查看全部评分

回复 使用道具 举报
呃,怎么说呢。。
(String)it.next()是调用了String的构造方法 我在哪里添加一个构造方法 可以编译正确??
首先这一句,你根本没有调用String的构造方法。这是强制类型转换。强转对类型的匹配是有限制的。
代码输出的话:可以有三种方法。
最简单的 是  System.out.println(it.next().toString());
             或者 System.out.println(it.next()+"");
       麻烦点:  System.out.println((Object)it.next()); //这是为 Integer和String搭建了一个桥梁。
回复 使用道具 举报
代码如下:
  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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马