你看下ArrayList ToString()的源码,是不是重写了ToString()

解决方案 »

  1.   

    ArrayList 后面是string 类型的啊。输出不就是string 类型的吗....
      

  2.   

        /**
         * Returns a string representation of this collection.  The string
         * representation consists of a list of the collection's elements in the
         * order they are returned by its iterator, enclosed in square brackets
         * (<tt>"[]"</tt>).  Adjacent elements are separated by the characters
         * <tt>", "</tt> (comma and space).  Elements are converted to strings as
         * by {@link String#valueOf(Object)}.
         *
         * @return a string representation of this collection
         */
        public String toString() {
            Iterator<E> it = iterator();
            if (! it.hasNext())
                return "[]";        StringBuilder sb = new StringBuilder();
            sb.append('[');
            for (;;) {
                E e = it.next();
                sb.append(e == this ? "(this Collection)" : e);
                if (! it.hasNext())
                    return sb.append(']').toString();
                sb.append(',').append(' ');
            }
        }
      

  3.   

    为什么字符串转字符数组,直接输出也是toString,字符串转字节数组就是内存地址……,这几个搞得我好乱……
      

  4.   

    能直接输出的就是这个类重写了toString方法,打印出来的是地址就是这个类么有重写toString方法,
      

  5.   


    打印对象就是调用对象本身tostring方法,默认tostring方式是输出地址。某些类重写tostring方法用来输出内容。Arraylist就是重写了tostring方法,所以输出的是Arraylist的内容
      

  6.   


    1、对于这段代码:
    System.out.println(list);
    想看他是怎么输出的,点击println看它的源码:
    public void print(Object obj) {
            write(String.valueOf(obj));
        }
    发现是按String.valueOf(obj)输出的,继续点进去:
        public static String valueOf(Object obj) {
            return (obj == null) ? "null" : obj.toString();
        }
    发现sout是按对象的toString方法输出的,那再去看ArrayList的toString是怎么重写的就好了。
    2、ArrayList的toString方法源码:
    ①找到ArrayList发现它自身没有重写toString方法,而是用的父类AbstractList的父类AbstractCollection的方法
    ②源码如下:   public String toString() {
            Iterator<E> it = iterator();
            if (! it.hasNext())
                return "[]";        StringBuilder sb = new StringBuilder();
            sb.append('[');
            for (;;) {
                E e = it.next();
                sb.append(e == this ? "(this Collection)" : e);
                if (! it.hasNext())
                    return sb.append(']').toString();
                sb.append(',').append(' ');
            }
        }
      

  7.   

    看你在4#这么说:“为什么字符串转字符数组,直接输出也是toString,字符串转字节数组就是内存地址……,这几个搞得我好乱……”
    你怎么转的,可以把代码粘出来看下。
      

  8.   

    我感觉他想说的应该 是直接打印数组 输出的为什么是内存地址 
    你要直接打印数组的话直接用Arrays.toString(arr)这个方法
      

  9.   

    重写tostring了呗
      

  10.   

    因为 String 类型重写了 toString 方法,所以打印出来的时候是字符,而不是一个地址
      

  11.   

    ArrayList继承了AbstractList , AbstractList类里重写了toString()方法,所以会打印值,不是地址值