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,全选来对所有的成员进行信息描述。
@Override
public 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;
}
@Override
public 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