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()
列为继承自classjava.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
实现碰巧以标准格式生成字符串。