1.前言
了解toString之前,要先明白Object类是什么,Object是所有对象的父类。在Object类当中含有toString()方法,因此所有的对象也都包含有一个toString()方法。
2.toString
2.1 方法调用
toString()方法主要的作用,是对类与对象的信息进行描述。
首先打印一个类中的成员。
class Students{public String name;public int age;public Students(String name, int age) {this.name = name;this.age = age;}}public class MyClass {public static void main(String[] args) {Students students = new Students("ZhangSan",90);System.out.println(students);//Students{name='ZhangSan', age=90}System.out.println(students.toString);}
}
com.example.java_learn_string.Students@504bae78
com.example.java_learn_string.Students@504bae78
2.3 hashCode
我们发现打印的确实是学生类,但是后面加上了@和一些乱码
当对对象进行打印输出的时候,可以发现,直接输出对象与调用对象的toString()方法产生的效果是一致的。
因为当去输出对象的时候,调用的也是对象的toString()方法,只不过不可见。
当使用toString()方法对对象进行描述的时候,它输出的格式是,类名+@+hashCode值。
hashCode是通过将对象的地址转换成一个整数来实现的。
我们可以通过函数进行直接打印hashCode
System.out.println(students.hashCode());System.out.println(Integer.toHexString(students.hashCode()));
1347137144
504bae78-------------------------------------------------------------------------------------------------------------------------
hashCode是通过将对象的地址转换成一个整数来实现的。
hashCode();返回的是一个十进制的整数值,而toString()方法当中打印输出的是一个十六进制的值,它们是相同的。所以将hashCode的值进行类型转换,得到的就是与上面@后面相同的值
所以,ToString是对成员详细信息的描写,我们可以将他进行重写来提高代码的可读性。
2.4 重写ToString
在Students类中按住ALT+insert键呼出Generate选项栏,也可以右键。点击toString,全选来对所有的成员进行信息描述。
@Overridepublic String toString() {return "Students{" +"name='" + name + '\'' +", age=" + age +'}';}
再次让程序执行,可读性就提高很多
class Students{public String name;public int age;public Students(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Students{" +"name='" + name + '\'' +", age=" + age +'}';}
}public class MyClass {public static void main(String[] args) {//将一整个学生类转变为字符串String s4 = String.valueOf(new Students("LiHua",14));System.out.println(s4);//Students{name='LiHua', age=14}Students students = new Students("ZhangSan",90);System.out.println(students);//Students{name='ZhangSan', age=90}System.out.println(students.toString());System.out.println(students.hashCode());System.out.println(Integer.toHexString(students.hashCode()));}
}
> Task :Java_learn_String:MyClass.main()
Students{name='LiHua', age=14}
Students{name='ZhangSan', age=90}
Students{name='ZhangSan', age=90}
248609774
ed17bee