字符串形式的表现
Q:toString() 方法实现了什么功能?
A:toString() 方法将根据调用它的对象返回其对象的字符串形式,通常用于 debug。
Q:当 toString() 方法没有被覆盖的时候,返回的字符串通常是什么样子的?
A:当 toString() 没有被覆盖的时候,返回的字符串格式是 类名@哈希值,哈希值是十六进制的,举例说,假设有一个 Employee 类,toString() 方法返回的结果可能是 Empoyee@1c7b0f4d.
Q:能提供一个正确覆盖 toString() 方法的例子吗?
A:见代码清单1.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Employee { private String name; private int age; public Employee(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + ": " + age; } } |
代码清单1:返回一个非默认的字符串形式
代码清单1声明了 Employee 类,被私有修饰符修饰的 name 和 age 变量,构造器将其初始化。该类覆盖了toString() 方法,并返回一个包含对象值和一个冒号的 String 对象。
字符串和
StringBuilder当编译器遇到
name + ": " + age的表达时,会生成一个java.lang.StringBuilder对象,并调用append()方法来对字符串添加变量值和分隔符。最后调用toString()方法返回一个包含各个元素的字符串对象。
Q:如何得到字符串的表达形式?
A:根据对象的引用,调用引用的 toString() 。例如,假设 emp 包含了一个 Employee 引用,调用emp.toString() 就会得到这个对象的字符串形式。
Q:System.out.println(o.toString()); 和 System.out.println(o) 的区别是什么?
A:System.out.println(o.toString()); 和 System.out.println(o) 两者的输出结果中都包含了对象的字符串形式。区别是,System.out.println(o.toString()); 是明确调用 toString() 方法,而System.out.println(o) 则是隐式调用了 toString()。