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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-9-6 20:06  /  1824 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合和数组:
import java.util.*;
class StringDemo
{
public static void main(String[] args)
{
  /*
  StringBuffer sbf=new StringBuffer();
  sbf.append("abc");
  sbf.append("345");
  System.out.print(sbf.toString()); //换成sbf打印结果一样啊?
  */
  
  ArrayList al=new ArrayList();
  al.add("java01 java02 java03");
  System.out.println(al);
  
  /*
  int[] arr={3,4,5};
  System.out.println(arr);
  */
}
}


File类
import  java.io.*;
class FileDemo
{
public static void main(String[] args)
{
  File f=new File("a.txt");
  sop(f);
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
}

上面两种情况都是类,怎么也能打印?
还有集合直接就能打印,为什么还要有遍历呢?


4 个回复

正序浏览
      说明一下,类能直接打印其实在是隐式调用自己的 类.toString() 方法,数组输出当前数组名的Hashcode值,集合输出其中的元素,File输出它指定的地址,这里面的核心动作就是  toString()  方法覆写,每种类都 有自己的toString实现方法,所以才会出现上面的输出情形。我们也常用toString方法来实现我们自定义的内容。
    集合能输出不代表它能操作啊,对于集合输出只是一个方式,它还有增删等好多方法呢,有个形象的比较就是for的高级循环,它同样可以遍历输出,但不能对其中的元素进行操作。
回复 使用道具 举报
ArrayList重写了toString方法。,它是重写了AbstractCollection类的toString方法。你可以去查查API。
源码是这样的:
public String toString() {
    Iterator<E> i = iterator();
    if (! i.hasNext())
      return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
       E e = i.next();
       sb.append(e == this ? "(this Collection)" : e);
       if (! i.hasNext())
          return sb.append(']').toString();
      sb.append(", ");
    }   
}
回复 使用道具 举报
思考一下!
回复 使用道具 举报
o(︶︿︶)o 唉,不多解释!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马