代码如下:import java.util.*;
class ArrayTest
{
public static void main(String args[])
{
Student[] ss=new Student[]{new Student(1,"张三"),
new Student(2,"李四"),
new Student(3,"王二")};
Arrays.sort(ss);
for(int i=0;i<ss.length;i++)
{
System.out.println(ss[i]);
}
}
}
class Student implements Comparable
{
int num;
String name;
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public String toString()
{
return "number="+num+","+"name="+name;
}
public int compareTo(Object o)
{
Student s=(Student)o;
return num>s.num ? 1:(num==s.num ? 0:-1);
}
}
System.out.println(ss[i])是怎样调用toString()方法的,书上说是直接调用的,我看不明白;int compareTo(Object o)方法说的比较此对象与指定对象的顺序,此对象与指定对象在这个例子中指代的各是哪个。小弟在此谢了!
class ArrayTest
{
public static void main(String args[])
{
Student[] ss=new Student[]{new Student(1,"张三"),
new Student(2,"李四"),
new Student(3,"王二")};
Arrays.sort(ss);
for(int i=0;i<ss.length;i++)
{
System.out.println(ss[i]);
}
}
}
class Student implements Comparable
{
int num;
String name;
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public String toString()
{
return "number="+num+","+"name="+name;
}
public int compareTo(Object o)
{
Student s=(Student)o;
return num>s.num ? 1:(num==s.num ? 0:-1);
}
}
System.out.println(ss[i])是怎样调用toString()方法的,书上说是直接调用的,我看不明白;int compareTo(Object o)方法说的比较此对象与指定对象的顺序,此对象与指定对象在这个例子中指代的各是哪个。小弟在此谢了!
public void println(Object x) {
String s = String.valueOf(x);
synchronized (lock) {
print(s);
println();
}
}
当你要打印一个数组的时候 他会首先去寻找他的toString()方法额
就是这样的哇实现Comparalbe接口 是因为可以让他们2个有比较如果你不实现这个接口 那么你让一个狗和一个杯子比较 怎么比较呢?
所以需要一个东西去比较的哇 这个就是Comparalbe接口
2,看下面代码。
Student student1 = new Student(1,"one");
Student student2 = new Student(2,"two");
int i = student1.compareTo(student2); //两个学生进行比较
此对象指student1 ,指定对象指student2 。
也就是说。在这个方法中,
public int compareTo(Object o)
{
Student s=(Student)o;
return num>s.num ? 1:(num==s.num ? 0:-1); }
num 就是 student1.num , s.num 是 student2.num
xx.compareTo(yy),xx就是此对象,yy就是指定对象;jdk相关文档都是这种描述方式,看习惯了就好.( - __ - )y-~
Object类中实际上就有public String toString() ;的定义。你也知道java中所有的对象几乎都是从这个类衍生出来的。
而你用System.out.println(ss[i]); 这里println实际上是调用PrintStream的public void println(Object x)方法。 public void println(Object x) {
synchronized (this) {
print(x);
newLine();
}
}而这里又调用了本类中的print(Object obj)方法 public void print(Object obj) {
write(String.valueOf(obj));
}这里我们看看String.valueOf(Object obj)到底做了什么?当你看String类的源码时你会发现 public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}这里如果对象不等于null时就是调用了Object的toString()方法。
而你的Student恰恰复写了Object的这个方法。所以自然调用你的public String toString()
{
return "number="+num+","+"name="+name;
} 这个方法了