Java 为什么日期类对象打印日期/时间/。。我们在哪里打印它提供地址的任何其他对象?

Java 为什么日期类对象打印日期/时间/。。我们在哪里打印它提供地址的任何其他对象?,java,class,date,object,Java,Class,Date,Object,考虑以下代码段: //Assume the import statements Date ob=new Date(); System.out.println(ob); //Where As DateFormat df=DateFormat.getDateInstance();//Just as an Example System.out.println(df); 结果如下: 1.2017年6月15日星期四14:53:03 2.java.

考虑以下代码段:

    //Assume the import statements


     Date ob=new Date();
    System.out.println(ob);

    //Where As

    DateFormat df=DateFormat.getDateInstance();//Just as an Example
    System.out.println(df);
结果如下:

1.2017年6月15日星期四14:53:03

2.java.text。SimpleDateFormat@ce9bf0a5(我知道这是hashcode)


问题是:为什么Date ob会有这种特殊性?

当我们打印对象时,就会调用它的
toString()
方法

publicstringtostring()
方法存在于
java.lang.Object
类中,由于对象类是所有其他类的超类,所以它对所有类都可用

java.util.Date
类已重写
toString()
方法,这就是原因


当您尝试打印对象时,它会调用相应类的
toString()
方法。如果类没有重写
toString()
,它将调用
对象的
类版本的
toString()
。现在,让我们看一下
Date
类和
toString()
的javadoc:

将此日期对象转换为以下格式的字符串:

道指周一至dd hh:mm:ss zzz yyyy

因此,它覆盖了
toString()
,因此我们可以看到字符串输出

现在,
DateFormat
class(javadoc)将
toString()
列为继承自class
java.lang.Object
(这意味着它不会覆盖
toSting()
)的方法之一,因此调用
Object
类版本的
toString()
,从而打印对象的哈希

Object
类的
toString()
方法的文档说明如下:

类对象的toString方法返回一个字符串,该字符串由 对象作为实例的类的名称,at符号 字符“@”和哈希的无符号十六进制表示形式 对象的代码。换句话说,此方法返回一个等于 价值:

getClass().getName()+'@'+Integer.toHexString(hashCode())


这是因为Date类重写了
java.lang.Object
中定义的方法
toString()
,从而允许日期返回更可读的表示形式

java.lang.Object
中,
toString()
声明为:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这就是DateFormat使用的

,因为
日期
覆盖
对象#到字符串
日期格式
不覆盖。另外,这不是地址,而是哈希代码。顺便说一下,避免使用Date和DateFormat类。现在被java.time类取代,它们的
toString
实现碰巧以标准格式生成字符串。