Java数组输出问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 04:48:20
public class Test{
public static void main(String[] args){
D[] days = new D[4];
for(int i=0;i<days.length;i++){
days[i] =new D(2,2004,i+1);
System.out.println(days[i]);
}
}
}
class D{
int day;int year;int month;
D(int d,int y,int m){
day = d;
year = y;
month = m;
}

}
输出的是
D@de6ced
D@c17164
D@1fb8ee3
D@61de33
请问大家这是什么原因
如果重写toString方法 该怎么写呢 在哪里重写

你需要再D类中重写toString方法.

print方法默认是调用的类中的toString方法,进行打印的..

之所以会出现
D@de6ced
D@c17164
D@1fb8ee3
D@61de33

是因为没有重写toString...所以调用的是Object中默认的toString方法即"类名@散列码十六进制表示"

因此如果需要打印出你想要的结果,必须在D中重写toString方法.

class D{
int day;int year;int month;
D(int d,int y,int m){
day = d;
year = y;
month = m;
}

@Override//加上重写注解这样可以预防很多重写时的错误
public String toString(){
return year+"-"+month+"-"+day;//显示年月日.
}
}

你打印出来的是对象,那样输出的是对象hashcode。打印的东西并没有错误。不明白你想输出什么。如果是年月日可以这样写:
System.out.println(days[i].year + "-" +days[i].month + "-" + days[i].day);

你要写toString就写在类D里面:
public String toString() {
return year + "-" + month + "-" + day;
}

你打印的数组元素是一个对象,打印输出时java默认调用了Object对象的public String toS