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

  我现在只知道默认toString()方法,返回的是类名+@+无符号的16进制的哈希码;
  疑问:
    1.toString方法,是系统自动调用的么?
  例如:person p=new person();
            Sysout(p);
   2.如果是自动调用的,那么下面俩个类为什么一个符合类名+@+无符号的16进制的哈希码,一个不符合类名+@+无符号的16进制的哈希码呢??求指教
   例如:Scanner s=new Scanner(System.in);
            Sysout(s);

            Random ran=new Random();
           Sysout(ran);

10 个回复

正序浏览
feng_pump 来自手机 中级黑马 2016-9-18 12:25:14
11#
toString如果你调用的那个类中重写了该方法,打出来的就是重写的方法中的内容,如果没有重写,打出来的就是你写的那个@之类的地址值。用之前看看api有没有重写就可以了
回复 使用道具 举报
奋斗41280 发表于 2016-9-15 22:01
是不是说自定义的类,都需要重写toString()?

看心情,看你想得到什么了!
回复 使用道具 举报
是不是说自定义的类,都需要重写toString()?
回复 使用道具 举报
长空皓月 发表于 2016-9-15 17:09
当你直接打印某对象时,会默认都用他的toString()方法的.另外,只要该类往上的继承体系中,有类重写了toString ...

嗯嗯,明白了;父类重写,子类可以直接使用,因为是继承关系,看来还是你想的多啊,多谢提醒了!
回复 使用道具 举报
浮类重写了 tostring方法
回复 使用道具 举报
当你直接打印某对象时,会默认都用他的toString()方法的.另外,只要该类往上的继承体系中,有类重写了toString()方法,他的子类或者子类的子类等等都不用再重写了
回复 使用道具 举报
这个 我只知道看API   
回复 使用道具 举报
13411939415 发表于 2016-9-15 14:29
object类中的toString返回的是类名+@+无符号的16进制的哈希码,object类是所有类的直接或间接父类,Random ...

大神,这个toString方法是系统自动调用的么?
回复 使用道具 举报
13411939415 发表于 2016-9-15 14:29
object类中的toString返回的是类名+@+无符号的16进制的哈希码,object类是所有类的直接或间接父类,Random ...

   你的回复很有用,多谢啦,但是刚我试了下,发现Random类中,并没有重写toString方法;Scaner重写了;
  Scanner类中的toString方法
   public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("java.util.Scanner");
        sb.append("[delimiters=" + delimPattern + "]");
        sb.append("[position=" + position + "]");
        sb.append("[match valid=" + matchValid + "]");
        sb.append("[need input=" + needInput + "]");
        sb.append("[source closed=" + sourceClosed + "]");
        sb.append("[skipped=" + skipped + "]");
        sb.append("[group separator=" + groupSeparator + "]");
        sb.append("[decimal separator=" + decimalSeparator + "]");
        sb.append("[positive prefix=" + positivePrefix + "]");
        sb.append("[negative prefix=" + negativePrefix + "]");
        sb.append("[positive suffix=" + positiveSuffix + "]");
        sb.append("[negative suffix=" + negativeSuffix + "]");
        sb.append("[NaN string=" + nanString + "]");
        sb.append("[infinity string=" + infinityString + "]");
        return sb.toString();
    }

很感谢你的指点
回复 使用道具 举报
object类中的toString返回的是类名+@+无符号的16进制的哈希码,object类是所有类的直接或间接父类,Random类继承自Object,重写了toString()方法,所以是按照重写后的方法来返回。所以只要直接打印对象的时候返回的不是类名+@+无符号的16进制的哈希码,就说明该类重写了Object的toString方法。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马