class person {
int id;
}
class sample {
public static void main(String... args) {
Integer i = new Integer(1234);
Person p = new Person();
List l = new ArrayList();
System.out.println(i);
System.out.println(p);
System.out.println(l);
}
}
输出:
1234
人@ 659e0bfd
[]
通常,当我们尝试打印对象引用时,它会打印" getClass()。getName()+" @" + Integer.toHexString(hashCode())" ,但是当涉及到包装类和集合时,它会输出完全不同的输出。为什么呢?
答案 0 :(得分:2)
执行System.out.println(obj)
时,会打印obj.toString()
方法的结果,如果您的自定义类没有覆盖toString()
,它会使用父类中的toString()
方法有toString()
方法覆盖(在您的情况下,该父类是Object
,因为这是所有类的默认父类,除非使用extends
关键字明确指定另一个类作为父类,根据documentation -
getClass().getName() + '@' + Integer.toHexString(hashCode())
如果是Wrapper类,它们会覆盖toString()
方法以提供正确的结果。
考虑一个例子 -
class p {
String id;
public p(String id) {
this.id = id;
}
public String toString() {
return "ID :" + id;
}
}
class a {
public static void main(String[] args) {
p p1 = new p("1001");
System.out.println(p1);
}
}
当我们运行它时,它会打印 -
ID :1001