toString方法 & toString方法的重写
一、toString方法
- public String toString():返回该对象的字符串表示
- toString返回的是对象的文本表现形式,如果没有重写该方法,打印出的结果由三部分构成:
- ① 该对象类型的全路径名称
- ② “@”字符
- ③ 十六进制的逻辑内存地址
//Student.java
public class Student extends Object {
}
//StudentTest3.java
public class StudentTest3 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
String string1 = s1.toString();
String string2 = s2.toString();
System.out.println(string1);
System.out.println(string2);
}
}
***执行结果:***
com.api.object.demo.Student@279f2327
com.api.object.demo.Student@2ff4acd0
二、根据toString方法返回值的格式可以尝试自己重写toString方法
- 知识点拓展:Integer类
- public static String toHexString(int i):
- 以十六进制无符号整数形式返回一个整数参数的字符串表示形式
//Student.java
public class Student extends Object {
@Override
public String toString() {
return super.toString();
}
public String toString2() {
//根据toString方法返回值特性重写的toString方法,但是下面的代码返回值为十进制
// return this.getClass().getName() + "@" +this.hashCode();
//Integer类的toHexString方法可以把十进制数转换成十六进制数并且以字符串形式返回
String hexString = Integer.toHexString(this.hashCode());
return this.getClass().getName() + "@" +hexString;
}
}
//StudentTest3.java
public class StudentTest3 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
System.out.println("Object类自带的toString方法:");
String string1 = s1.toString();
String string2 = s2.toString();
System.out.println(string1);
System.out.println(string2);
System.out.println("重写的toString方法:");
String string3 = s1.toString2();
String string4 = s2.toString2();
System.out.println(string3);
System.out.println(string4);
}
}
***执行结果:***
Object类自带的toString方法:
com.api.object.demo.Student@279f2327
com.api.object.demo.Student@2ff4acd0
重写的toString方法:
com.api.object.demo.Student@279f2327
com.api.object.demo.Student@2ff4acd0
- 查看toString方法在父类中的源码
- 可以发现跟上面自己重写的方法相同
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
三、toString方法的重写
//Student.java
public class Student extends Object {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
//重写toString方法
//用字符串把当前对象的属性输出来
return "name: " + name + " age: " + age;
}
}
//StudentTest4.java
public class StudentTest4 {
public static void main(String[] args) {
Student s1 = new Student("张三", 18);
Student s2 = new Student("李四", 19);
System.out.println(s1.toString());
System.out.println(s2.toString());
}
}
***执行结果:***
name: 张三 age: 18
name: 李四 age: 19
- 如果直接打印一个对象,那么其实是打印了该对象toString方法返回值
public class StudentTest4 {
public static void main(String[] args) {
Student s1 = new Student("张三", 18);
Student s2 = new Student("李四", 19);
System.out.println(s1);
System.out.println(s2);
}
}
***执行结果:***
name: 张三 age: 18
name: 李四 age: 19
- eclipse其实有自带的toString重写方法,不用手动重写
// @Override
// public String toString() {
// //重写toString方法
// //用字符串把当前对象的属性输出来
// return "name: " + name + " age: " + age;
// }
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
***执行结果:***
Student [name=张三, age=18]
Student [name=李四, age=19]