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基础