JAVA在代码中已经覆写了toString方法 为什么输出还是对象的地址

JAVA在代码中已经覆写了toString方法 为什么输出还是对象的地址

问题描述:

package com.xyh.Demo;

import java.util.Arrays;
import java.util.Comparator;

class BC implements Comparator{

@Override
public int compare(Book o1, Book o2) {
    // TODO Auto-generated method stub
    if(o1.getDate()<o2.getDate()){
        return -1;
    }else if(o1.getDate()>o2.getDate()){
        return 1;
    }
    return 0;
}

}
class Book {
private int date;
private String author;

/**
 * @param date
 * @param author
 */
public Book(int date, String author) {
    super();
    this.date = date;
    this.author = author;
}

public int getDate() {
    return date;
}

public void setDate(int date) {
    this.date = date;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

@Override
public String toString() {
    return "Book [date=" + date + ", author=" + author + "]";
}

}

public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
     Book []book={
             new Book(100,"XX"),
             new Book(90,"YY")
             };

     Arrays.sort(book,new BC());
     System.out.println(book);
}

}

你重写的是对象的toString
你输出的是数组,调用的是数组的toString,当然没用。因为你不能重写数组的toString,所以你需要手工循环下
System.out.println(book);
->
for (Book b : book) System.out.println(b);

想知道为什么么?我来告诉你吧,你的book是一个数组,数组里面的每一个元素是一个Book对象,你这样输出当然输出的是一个数组的首地址的东西咯
改为
for(Bood b:book){
System.out.println(b);
}
这样输出就可以了

你的book是一个数组,数组里面的每一个元素是一个Book对象,你这样输出当然输出的是一个数组的首地址的东西咯
改为
for(Bood b:book){
System.out.println(b);
}
这样输出就可以了

楼上的能不能看下jdk源码:
注意事项:

1.必须被声明为public

2.返回类型为String

3.方法的名称必须为toString,且无参数

4.方法体中不要使用输出方法System.out.println()

认真回答每个问题 如满意 请采纳 谢谢

String [] arra = {bood,bood2};
Arrays.toString(arra);

你这样输出的是数组的首地址,建议认真学java基础