Object类中的toString方法
toString方法的源码:
//getClass().getName()前面应该有一个"this.",是获取当前对象类的类名
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。
源码上toString()方法默认实现的是:
类名@对象的内存地址转换为十六进制的形式
例:(输出结果为Mytime@4eec7777
)
public class Test01 {
public static void main(String[] args) {
Mytime mytime=new Mytime(2001,12,5);
String t1=mytime.toString();
System.out.println(t1);
}
}
class Mytime{
int year;
int month;
int day;
public Mytime() {
}
public Mytime(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
}
toString()方法的作用是什么?
toString()方法设计的目的是:通过调用这个方法可以将一个“java对象”转换成“字符串表示形式”。
建议所有的子类都去重写toString()方法。toString()方法应该是应该简洁的、详实的、易阅读的。
对于一个日期对象,我们更想得到的结果是“xxxx年xx月xx日”,但是上述例子的输出结果是一个“类名@内存地址”的格式(Mytime@4eec7777
)并不是我们想要的,所以我们可以重写toString()方法。
怎么重写toString()方法:(越简洁越好,可读性越强越好)
以上述代码为例:
public String toString(){
return this.year+"年"+this.month+"月"+this.day+"日";
}
重写toString()方法后再次输出的结果是:“2001年12月5日
”
注意:当System.out.println();
里面输出的是一个引用的时候,会自动调用该引用的toString()方法。
还是以上述代码为例:
public class Test01 {
public static void main(String[] args) {
Mytime mytime=new Mytime(2001,12,5);
//String t1=mytime.toString();
System.out.println(mytime);
System.out.println(mytime.toString());
}
}
输出结果为: