黑马程序员技术交流社区

标题: 关于这个toString哈~~ [打印本页]

作者: 赵海洋    时间: 2013-3-1 11:38
标题: 关于这个toString哈~~
本帖最后由 赵海洋 于 2013-3-1 14:56 编辑

首先是一段很简答的代码,在论坛里看到的:
  1. public class TestString
  2. {
  3.         private String name;
  4.         private int age;
  5.         public TestString(){}
  6.         public TestString(String name,int age)
  7.         {
  8.                 this.name = name;
  9.                 this.age = age;
  10.         }
  11.         public String toString()
  12.         {
  13.                 return name+age;
  14.         }
  15.         public static void main(String[] args)
  16.         {
  17.                 TestString test = new TestString("lisa",23);
  18.                 System.out.println(test);
  19.         }
  20. }
复制代码
然后呢,打印出来是lisa23,这端代码打印的是test,而这个lisa23其实应该是打印的test.toString(),于是我这么做了:
  1. public class TestString
  2. {
  3.         private String name;
  4.         private int age;
  5.         public TestString(){}
  6.         public TestString(String name,int age)
  7.         {
  8.                 this.name = name;
  9.                 this.age = age;
  10.         }
  11.         public static void main(String[] args)
  12.         {
  13.                 TestString test = new TestString("lisa",23);
  14.                 System.out.println(test);
  15.         }
  16. }
复制代码
我把重写的toString语句删掉,再打印是TestString@145c859,也就是打印的哈希值,是不是可以理解为:如果我这里直接打印对象test,默认执行的其实是test.toString()。
求解释,求解释~~到底对不对????

作者: 谢波    时间: 2013-3-1 12:22
System.out.println(test);和System.out.println(test.toString());是一样的
toString方法是从Object继承而来的
在Object中的toString方法返回的是对象的引用,即类名+@+hashCode()
如果想要打印出自己想要的结果,可以重写toString方法

作者: 罗海云    时间: 2013-3-1 12:36
可以这么理解...默认的system.out.println(对象.toString()), 假如不需要按照系统默认的打的话. 可以自己复写..
作者: 赵海洋    时间: 2013-3-1 14:11
罗海云 发表于 2013-3-1 12:36
可以这么理解...默认的system.out.println(对象.toString()), 假如不需要按照系统默认的打的话. 可以自己复 ...

哦了,谢谢~~~




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