在java中为啥要重写toString 方法?下面以一个简单的例子来说明。
先定义一个test5类。并写它的get,set方法。
package test5; public class Test5 { private String name; private String sex; private int No; public void Show(){ System.out.println("这是我的展示方法!!!!"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getNo() { return No; } public void setNo(int no) { this.No = no; } } 然后定义一个带有主函数的test6的类,如下: package test5; public class Test6 { public static void main(String[] args) { Class<?> demo= null; try { demo=Class.forName("test5.Test5"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Test5 test5= new Test5(); test5.setName("xiaoming"); test5.setNo(001); test5.setSex("man"); System.out.println(test5); } }
运行上面的程序发现,结果如下:
test5.Test5@e2cb55
显然这个并不是我们所想要得到的这个test5的属性值,原因很简单,就是object类里的toString只是把字符串的直接打印,
数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。而上面的结果就是test5所对应的哈希值。
如果想要得到test5的各个属性值应该重写toString方法。如下:
public String toString(){ return "["+this.name+" "+this.sex+" "+this.No+"]"; }
则Test5应该写成如下:
package test5; public class Test5 { private String name; private String sex; private int No; public String toString(){ return "["+this.name+" "+this.sex+" "+this.No+"]"; } public void Show(){ System.out.println("这是我的展示方法!!!!"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getNo() { return No; } public void setNo(int no) { this.No = no; } }
这次再运行test6时发现结果是:
[xiaoming man 1]