用字符串输出对象
程序员文章站
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例》
上一篇: leetcode 5. 最长回文子串 中等 动态规划
下一篇: 字符串输出对齐问题