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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高双武 黑马帝   /  2011-11-15 17:17  /  1621 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这个程序中,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);
        }
}

4 个回复

倒序浏览
其实默认输出的是对象.toString()方法,  arr这个方法里面是输出里面元素,而al输出的是[I@de6ced
回复 使用道具 举报
呃。我只知道要想打印数组,每次都是遍历.
回复 使用道具 举报
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(", ");
        }
    }
回复 使用道具 举报
八大基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用。去看一下张老师的数组与Object的关系及其反射类型,就应该理解透了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马