开发者社区 问答 正文

Java 数组输出乱码

public class TestDate{
  public static void main(String[] args){
  Date[] days = new Date[5];
  days[0] = new Date(1992 ,10 ,1);
  days[1] = new Date(1993 ,9 ,7);
  System.out.println(days[0]);
 
 }
}
class Date {
int year,month,day;
Date(int y, int m, int d){
year=y;month=m;day=d;}
 
}
 ``

程序如图,随便输出一个Date类的对象 却得到一串数字,days[0]输出  Date@20f0691c 真的弄不懂了。 

展开
收起
爵霸 2016-06-08 12:52:31 3203 分享 版权
1 条回答
写回答
取消 提交回答
  • 首先out是System类的静态变量,其类型是PrintStream,

    println()是PrintStream的一个静态函数,如果其参数为对象,则调用该对象的toString()函数,

    你程序里days[0]是个你自定义的Date对象,该对象没定义toString()这个函数,但Java中所有的类最终都继承自java.lang.Object对象,所以此时调用的是java.lang.Object.toString()这个函数,

    根据java API中的这个函数的说明,其输出的是:getClass().getName() + '@' + Integer.toHexString(hashCode()),也就是:类名@16进制形式的hashCode。

    同样Date没定义hashCode()这个函数,所以调用的是 java.lang.Object.hashCode(),这个函数输出的是该对象在内存中的地址。

    所以结果就是:Date@20f0691c

    详情请参考Java API文档,地址:http://docs.oracle.com/javase/7/docs/api/

    2019-07-17 19:31:40
    赞同 展开评论
问答分类:
问答标签:
问答地址: