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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李节起 中级黑马   /  2012-4-10 12:09  /  2763 人查看  /  6 人回复  /   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

查看全部评分

6 个回复

倒序浏览
本帖最后由 翟友伟 于 2012-4-10 12:27 编辑

你打印的 是 stu    Student类型的对象 ,不是 string 。  stu.nane才是string对象 。。

println(String) 打印的String在内存中的对象,返回自动调用 toString()           "toString "  意思返回 变成字符串形式。  自动调用  ------------
tostring  返回的是         对象.getclass.getname +"@" +integer.tohexstring(hashcode()) --------
回复 使用道具 举报
System.out.println(stu); // 打印的时候,不能打印在栈内存中的引用变量名
回复 使用道具 举报
我知道System.out.println(stu); 打印的的是存放新建的对象new Student("lisi");在内存的地址,但你加一个toString 后能打印name=lisi就不清楚了,关注下。等高手来解。
回复 使用道具 举报
因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。



它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法



总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法



回答补充:



写这个方法的用途就是为了方便操作,所以在文件操作里面可用可不用

回复 使用道具 举报
public class Orc{       public static class A       {              public String toString()              {                     return "this is A";              }       }       public static void main(String[] args)       {              A obj = new A();              System.out.println(obj);       }}
如果某个方法里面有如下句子:


A obj=new A();



System.out.println(obj);



会得到输出:this is A

public class Orc{       public static class A       {              public String getString()              {                     return "this is A";              }       }       public static void main(String[] args)       {              A obj = new A();              System.out.println(obj);              System.out.println(obj.getString());       }}
会得到输出:xxxx@xxxxxxx的类名加地址形式


System.out.println(obj.getString());



会得到输出:this is A

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是这样的:
所有的类都继承了 Object,你写的Student类中的toString方法 相当于重写了 父类Object的toString方法,
所以 在打印的时候就使用了重写的toStrig方法,
当你去掉了toString方法时,你在打印的时候就会自动调用Object的toString方法;
Object中的toString方法是这样的:getClass().getName() + '@' + Integer.toHexString(hashCode())
所以你打印出的格式就是这样的:Student@1fb8ee3

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1 赞一个!

查看全部评分

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