字符串形式的表现
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()
。