黑马程序员技术交流社区

标题: 关于toString()方法 [打印本页]

作者: a2015272261    时间: 2016-3-31 19:24
标题: 关于toString()方法
                Integer i = new Integer(1);
                System.out.println(i.toString());

这个程序Integer没有重写toString(),

                ArrayList list = new ArrayList();
               
                //存放三个Point实例到集合中
                Point point = new Point(1,2);
                list.add(point);
                list.add(new Point(3,4));
                list.add(new Point(5,6));
               
                System.out.println(list);
这个程序中ArrayList重写了toString(),我想问问为什么有些重写有的没有呢
作者: 可可TKD    时间: 2016-3-31 20:18
这个我也没搞清楚,同求大神指点
作者: oassuperhan    时间: 2016-3-31 22:45
如果你看过源代码,就知道Integer是重写了toString方法的,否则你用toString返回的就不是Integer对象的整型数值,而是对象的引用值.对toString方法的引用是根据需要进行的.有的对象转换成字符串有意义,所以在库文件中将其重写,而有的对象没有特殊意义,就继承Object类的toString方法
作者: oassuperhan    时间: 2016-3-31 22:54
public String toString() {
        return toString(value);
    }
这个就是Integer重写Object类toString方法的源代码,Integer类还重载了toString方法,
例如public static String toString(int i);
public static String toString(int i, int radix);没事可以多研究一下源代码,很多东西单纯的思考是不会有结果的,看看源代码就清楚了

作者: abijiame    时间: 2016-3-31 23:52
学习了,集合学的头大
作者: 追梦de蜗牛2016    时间: 2016-4-1 14:51
直接打印对象名,如果出现的是一堆看不懂的乱码(第一个是[,中间是@,后面是一串16进制的数字),就说明没有重写toString方法,如果出现的结果是和对象名.toString()相同,说明已经被重写,可能是它本身重写的,也可能是它的父类重写的




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