Collection c = new ArrayList();
c.add(new String("aaa"));
c.add(new String("bbb"));
c.add(new String("ccc"));

for(Object o : c) {
System.out.print(o + " ");
}为什么可以直接打印object对象得到的结果就是普通的string类型,而不是那种类名加@什么的?
好像是重写toString方法,没搞明白,希望可以详细解释一下,谢谢

解决方案 »

  1.   

    for(Object o : c) {
    System.out.print(o + " ");
    }
    ==
    Object o = null;
    for(int i=0;i<c.size();i++){
       o = c.get(i);
       System.out.print(o + " ");}
    这样打印肯定可以得到list里面的值了
      

  2.   

    o + " "就已经将Object转换成String了。而且这里涉及到一个向上转型的问题。
    楼主可以看一下:http://blog.csdn.net/jtchan/article/details/6617573
      

  3.   


    我那样也是可以得到值的,我的问题是怎么重写 toString方法的啊??
      

  4.   

    String里面有重写toString方法。所以调用Object o = ...; o.toString()也是调用String中的toString方法的
      

  5.   

        public void print(Object obj) {
    write(String.valueOf(obj));
        }
    print方法。如果你传一个object类型的数据。后台会先转换成String
      

  6.   

    看书看晕了吧
    哪里重写了toString()方法的
    o + ""就相当于将object强制转型为String
      

  7.   

    你的这个语句:Collection c = new ArrayList();
    其中c即为一个ArrayList对象;接下来:c.add(new String("aaa"));
    你在c中加入的是字符串元素,同时ArrayList类型是Object的子类型,故for(Object o : c)这个语句遍历的是c中的各个元素,即为String类型。
      

  8.   

    c.add(new String("aaa")); //因为集合里存放的就是String类型
    如果存放的是其他类型,必须重写toString方法,否则就会打印出类名加@哈西值
      

  9.   

     string重写了object,tostring方法,
    你把string转为object,但其方法还是调用string里面的tostring(),楼主可用下面的语句去试试
    System.out.println(((Object)(new String("我是string类"))).toString());
      

  10.   

    对啊,已经转型了。+“”后。然后调用String的toString方法,这个方法继承自Object然后被重写了。