Java new Date() 正在打印

  • 本文关键字:打印 new Date Java java
  • 更新时间 :
  • 英文 :


只是学习Java,我知道这听起来可能很愚蠢,但我不得不问。

System.out.print(new Date());

我知道参数中的任何内容都会转换为字符串,即结束值, new Date()返回对 Date 对象的引用。那么它是如何打印出来的呢?

Mon Aug 29 13:22:03 BST 2011

我唯一能想到的是,该函数以某种方式解析所有数据成员,使其值转换为字符串并打印它们。

如果不是,它是如何工作的?

谢谢

该方法System.out.print(obj);调用对象的.toString()方法。由类根据需要定义该方法。如果对象null则打印"null"。

如果类未定义自己的 .toString() 方法,则应用Object类的默认实现,实质上是打印@后跟哈希代码。

打印某些内容时,将调用该对象的toString()方法。因此,由各个类来提供有意义的实现。

有关参考,请参阅

  • Java 教程:对象类

这是Date的toString((方法:

public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
    index = 8;
}
convertToAbbr(sb, wtb[index]).append(' ');            // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' ');  // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':');   // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
    sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
} else {
    sb.append("GMT");
}
sb.append(' ').append(date.getYear());  // yyyy
return sb.toString();
}

Object有一个toString(),它是对象的文本化表示。所有 Java 对象都隐式或显式扩展 Object。某些类已重写toString()方法(如 java.util.Date (。

因此,当您这样做时:

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

它被"松散地"翻译为

System.out.println(new Date().toString());

这是Java的默认行为。


实际上,来自Systemout.println()调用PrintStream.println(Object x),它(内部,在代码中(确实(return (x == null)? "null" : x.toString()(。

如果子类化 Object 未重写 toString() 方法,则改为调用 Object.toString 方法(因为所有类都隐式或显式扩展Object(。

默认情况下调用对象的 toString() 方法。

Java 中的每个对象都从 Object 扩展而来。Object 定义一个方法 toString,该方法负责将对象转换为字符串表示形式。

在大多数 JVM 上,Object 中的缺省实现返回完整的类名,后跟"@"和一个十六进制数字,表示 JVM 中唯一该对象实例。

Date 对象重写 toString 方法,返回您看到打印的字符串。

print 方法对新日期对象隐式调用 toString 方法。 toStringObject 中定义,但在 Date 中被覆盖,如此处所述。

通常:每次在需要 String 的位置使用对象时,都会自动调用 toString 方法。

System.out.println 接受对象作为参数。如前所述,所有Java类都继承自Object。此 Object 类包含一个 'toString' 方法,println 方法只是从对象调用 toString 方法。由于所有类都继承自 Object,因此每个类都有一个可以调用的 toString 方法。

最新更新