黑马程序员技术交流社区

标题: 集合问题 [打印本页]

作者: 高双武    时间: 2011-11-15 17:17
标题: 集合问题
下面这个程序中,al和arr都是引用类型的,为什么一个输出结果是引用地址,一个输出结果是存的内容?
代码如下
package execisetest;
import java.util.*;
public class CollectionTest {
        public static void main(String [] args){
                ArrayList al=new ArrayList();
                al.add("jacaa");
                al.add("fsf");
                al.add("fsfaf");               
                sop(al);       
                int []  arr=new int[]{2,2,3,6};
                sop(arr);
        }
        public static void sop(Object obj){
                System.out.println(obj);
        }
}

作者: 葛雨龙    时间: 2011-11-15 17:20
其实默认输出的是对象.toString()方法,  arr这个方法里面是输出里面元素,而al输出的是[I@de6ced
作者: 骚灵小情歌    时间: 2011-11-15 17:37
呃。我只知道要想打印数组,每次都是遍历.
作者: zhanghua    时间: 2011-11-15 18:10
ArrayList()类本身默认重写了toString()方法,而存储的对象是String,而String也重写了toString()方法,
而下面的数组并没有重写toString()方法,则会一直向上调用,直到Object.toString()方法,这个方法默认就是打印类名+@+十六进制的内存地址

这是ArrayList继续的源代码
    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(", ");
        }
    }
作者: 李印东老师    时间: 2011-11-15 19:16
八大基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用。去看一下张老师的数组与Object的关系及其反射类型,就应该理解透了。




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