toString方法
不知道各位有没有试过System.out.println(引用);
,对于这个语句的输出各位有没有觉得很奇怪,一堆噼里啪啦的看不懂的东西,但是居然没报错,欸嘿,下面带你了解了解 ^-^
//源码
/*
public String toString(){
return this.getClass().getName() + '@' + Integer.toHexString(hashCode());
}
用法:引用.toString()
作用:返回一个字符串,字符串内容为:类名@对象的内存地址的十六进制的表达形式
*/
//下面是一个java文件,可自行测试
public class test {
public static void main(String[] args) {
A a = new A();
a.toString();
}
}
class A{
}
//运行结果为 A@0x.... 省略号部分为内存地址
乍一看这个方法好像很没用的样子,返回类名@加内存地址
对我们敲代码有什么用呢?但是,but,我们应该知道有方法重写这种东西吧?子类继承父类,那么在子类中可以重写父类的方法让其实现新的功能,来,我们对上面的代码稍加修改:
public class test {
public static void main(String[] args) {
A a = new A();
a.toString();
}
}
class A{
int year;
int month;
public String toString() {
return "A{" +
"year=" + year +
", month=" + month +
'}';
}
}
//此时这个程序的运行结果变成了A{year = 0,month = 0},都是0是因为我没有对a的属性进行赋值,int类型的变量默认值为0
这么一看来好像还是没什么用,但是好在这个方法在 IDEA 里面可以自己生成,上面的那个重写的方法就是我用 IDEA 自己生成的,欸嘿,所以只要改好数据我们就可以输出我们想要输出的东西了,比如return this.year + "年" + this.month + "月";
,这样子我们创建的对象再调用这个方法的时候就会输出你想要查看的属性了!
关于toString()
方法,以后所有的类都建议重写该方法!!!
原因回到开头的那个问题System.out.println(引用);
当输出语句的对象是一个引用时,编译器不会报错,而是会默认的调用该对象的toString()
方法,而如果不重写的话,就会出现开头所说看不懂运行结果的小问题。欸嘿,有用但不完全有有用的知识增加了^-^