代码如下: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)方法说的比较此对象与指定对象的顺序,此对象与指定对象在这个例子中指代的各是哪个。小弟在此谢了!

解决方案 »

  1.   

    println见源码
    public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (lock) {
        print(s);
        println();
    }
        }
      

  2.   

    toString();是这样的额 
    当你要打印一个数组的时候 他会首先去寻找他的toString()方法额
    就是这样的哇实现Comparalbe接口 是因为可以让他们2个有比较如果你不实现这个接口  那么你让一个狗和一个杯子比较  怎么比较呢?
    所以需要一个东西去比较的哇  这个就是Comparalbe接口
      

  3.   

    1,就是说System.out.println(ss[i]) 与 System.out.println(ss[i].toString())的效果是一样的。
    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
     
      

  4.   

    1楼很好,很强大.ss[i]就是一个Student类,当然是直接调的Student类的toString()方法.
    xx.compareTo(yy),xx就是此对象,yy就是指定对象;jdk相关文档都是这种描述方式,看习惯了就好.( - __ - )y-~
      

  5.   

    1.System.out.println(ss[i])调用问题:
    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; 
            } 这个方法了