黑马程序员技术交流社区

标题: 一个integer类和String类的问题 [打印本页]

作者: 潘际昌    时间: 2013-11-23 14:55
标题: 一个integer类和String类的问题
本帖最后由 潘际昌 于 2013-11-24 00:54 编辑

import java.util.*;



public class Test
{

        public static void main(String[] args) {
                TreeSet<Student> ts=new TreeSet<Student>(new myComparator());
                ts.add(new Student("zhangsan1",20,97));
                ts.add(new Student("zhangsan2",21,99));
                ts.add(new Student("zhangsan5",25,95));
                ts.add(new Student("zhangsan3",19,98));
                ts.add(new Student("zhangsan7",15,90));
                Iterator<Student> it = ts.iterator();
                while(it.hasNext())
                {
                        Student s= it.next();
                        System.out.println(s.getName()+","+s.getAge()+","+s.getScore());
                }
                                
        }

}
class myComparator implements Comparator<Student>
{
        public int compare(Student s1,Student s2)
        {
               
               
        
                int num=new Integer(s1.getScore()).compareTo(new Integer(s2.getScore()));
                if(num==0)
                {
                        return s1.getName().compareTo(s2.getName());
                }
                return num;
        }
        
        
}
class Student
{
        String name;
        int age;
        int score;
        Student(String name,int age,int score)
        {
                this.name=name;
                this.age=age;
                this.score=score;
        }
        String getName()
        {
                return name;
        }
        int getAge()
        {
                return age;
        }
        int getScore()
        {
                return score;
        }
        
        
}比较器里面,为什么 s1.getName().compareTo(s2.getName());字符型可以直接比较,而int型        
int num=new Integer(s1.getScore()).compareTo(new Integer(s2.getScore()));还需要new Interger()呢?




作者: ζ丶凡σ    时间: 2013-11-23 15:02
字符串就是对象,可以直接compareTo进行比较,int型是基本数据类型,得装箱成Integer对象类型,才可以用compareTo进行比较,所以要new Ingeger()      
API里面compareTo(T o) 方法
          比较此对象与指定对象的顺序。
作者: hurryup    时间: 2013-11-23 15:26
这个帖子,论坛上以前发过啊?怎么又重发一遍。
查jdk可知:
public interface Comparable<T>此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

compareToint compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较
所以CompareTo方法是比较两个对象,不能比较基本数据类型,所以int型要包装成Integer类型对象类型进行比较。
作者: 王贺    时间: 2013-11-23 15:37
compareTo方法是对对象用的,字符串是对象,所以可以,而int是数据类型,需要封箱后来比较,所以会有new integer()这样的代码
作者: 忄雾飞扬    时间: 2013-11-23 15:54
在你的类中,字符串是string对象引用,是个对象,
而数字在JDK1.5后的有自动装箱和自动拆箱功能,
你直接用数字调用compareTo()方法时,必须时对象来调用,但由于JDK1.5后的特性,导致compareTo方法无法确定数字是对象还是基本类型,new Integer()来修饰
作者: 忘记了    时间: 2013-11-23 23:21
compareTo()两边都是对象,不是类型。
s1.getName().compareTo(s2.getName())完整写法是
newString(s1.getName()).compareTonewString((s2.getName()));
因为有了自动装箱功能,所以可以简写。
这里似乎只限于字符型有自动装箱。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2