Java常用API——toString方法 & toString方法的重写

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]

猜你喜欢

转载自blog.csdn.net/weixin_43796325/article/details/104505318
今日推荐