欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用字符串输出对象

程序员文章站 2022-07-13 23:25:18
...

一、问题描述:

在使用如下的语句输出对象时,会出现一些人看不明白的代码

System.out.println(Object);

例如,如下代码:

import java.awt.Color;

public class Cat {
	private String name;           //这四个最好设置为private,防止混乱
	private int age;
	private int weight;
	private Color color;
	
	public Cat(String name,int age,int weight,Color color) {
		this.name=name;
		this.age=age;
		this.weight=weight;
		this.color=color;
	}
}


public class Test {

	public static void main(String[] args) {
		Cat cat1=new Cat("Java",12,21,Color.BLACK);
		Cat cat2=new Cat("C++",12,21,Color.WHITE);
		Cat cat3=new Cat("Java",12,21,Color.BLACK);
		
		System.out.println("猫咪1号:"+cat1);
		System.out.println("猫咪2号:"+cat2);
		System.out.println("猫咪3号:"+cat3);
		
	}

}

运行结果如下:

用字符串输出对象


二、解决方案

首先,我们要弄清楚,System.out.println(Object)是怎么输出对象的;

查API的println(java.lang.Object)方法,可知此方法首先调用String.valueOf(Object)获取打印对象的字符串值;

再查public static String valueOf(Object object)方法,可知该方法中如果参数为null,则字符串等于null;否则返回obj.toString()的值。因此,我们只需要改写obj.toString()方法即可。


三、补充代码

public class Cat {
	private String name;           //这四个最好设置为private,防止混乱
	private int age;
	private int weight;
	private Color color;
	
	public Cat(String name,int age,int weight,Color color) {
		this.name=name;
		this.age=age;
		this.weight=weight;
		this.color=color;
	}
	
	public String toString() {
			StringBuilder sb=new StringBuilder();             //字符串生成器,可以随时增加、插入、删除字符串,避免了使用+号连接造成的问题
			sb.append("名字"+name+"\n");
			sb.append("年龄"+age+"\n");
			sb.append("重量"+weight+"\n");
			sb.append("颜色"+color+"\n");
			return sb.toString();                             //注意,这里的toString()方法是StringBuilder下的toString()方法,
			                                                 //而上面重写的toString()方法是Object类的toString()方法,二者不是一个类下的方法
		}
	
}

import java.awt.Color;

public class Test {

	public static void main(String[] args) {
		Cat cat1=new Cat("Java",12,21,Color.BLACK);
		Cat cat2=new Cat("C++",12,21,Color.WHITE);
		Cat cat3=new Cat("Java",12,21,Color.BLACK);
		
		System.out.println("猫咪1号:"+cat1);
		System.out.println("猫咪2号:"+cat1);
		System.out.println("猫咪3号:"+cat1);
		
	}

}

输出结果为:

用字符串输出对象


备注:此问题的思考源于阅读《Java经典编程300例》

相关标签: Java