包装类与类(用户定义)

时间:2015-08-09 12:22:52

标签: java tostring

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())" ,但是当涉及到包装类和集合时,它会输出完全不同的输出。为什么呢?

1 个答案:

答案 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