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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李龙龙 黑马帝   /  2011-11-2 08:10  /  2170 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Demo
{
        public static void main(String[] args)
        {
                //System.out.println("Hello World!");
                Student stu =new Student("lisi");
                System.out.println(stu);

        }
}

class Student
{
        private String name;
        Student(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        public String  toString()
        {
                return "name="+name;
        }
}

上面小程序,打印的结果是 name=lisi ,
当注释了public String  toString()
        {
                return "name="+name;
        }

打印结果Student@1fb8ee3,问一下打印String时,是否自动调用toString()方法,能说一下原理吗?谢谢


评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
在Java中,打印一个对象会默认调用toString()方法,Object 类的 toString 方法返回一个字符串,如没有对toString()方法进行重写,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 沙铁健 于 2011-11-2 08:32 编辑

给你个直观点的吧
  1. System.out.println(stu.toString());//先这么输出
  2. ------------------------------------------------
  3. //然后你把这个在你的student类里加上
  4. public String  toString()
  5.         {
  6.                 return "name="+name;
  7.         }
  8. //在这么输出一遍
  9. System.out.print(stu.toStrng());
  10. //这样你就能直观的发现打印出来的东西了
复制代码
再结合一下 别人的解释  基本道理  楼上都说了很清楚...... 我认识可没这么清楚...就知道 打印对象默认调用对象.toString()方法 这个方法是object类的 所以是打印出来的是类名@哈希码.........

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
toString
public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
上面是API中Object给出的说明.
由于Object是上帝,所有类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
自定义的类一定要覆盖该方法.

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢,各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马