A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陆鹏 中级黑马   /  2012-6-29 08:46  /  3394 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陆鹏 于 2012-6-29 09:02 编辑

在这个比较器中
class StrLenComparator implements Comparator
{
        public int compare(Object o1,Object o2)
        {
                String s1 = (String)o1;
                String s2 = (String)o2;

                /*
                if(s1.length()>s2.length())
                        return 1;
                if(s1.length()==s2.length())
                        return 0;
                        */

                        

                int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));              
                         if(num==0)
                        return s1.compareTo(s2);

                return num;
        }
}

红体字部分看不懂
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
num是一个基本数据类型的变量,可是“=”后届个“new”,怎么又变成了对象了呢?
Integer(s1.length()).compareTo(new Integer(s2.length()));
这部分能理解是比较s1和s2的length()的大小,可是前面加了个new又是怎么回事呢?

7 个回复

倒序浏览
把代码拆开:
new Integer(s1.length()) 这个Integer用自己的compareTo方法去和new Integer(s2.length())做比较,返回的是一个int型的值,用num接收,这样写你就明白了。
(new Integer(s1.length())).compareTo(new Integer(s2.length()));

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报

本帖最后由 吴超 于 2012-6-29 08:57 编辑

compareTo比较的是Integer对象,返回一个int值(0,整数,负数)
至于new那个是调用构造方法Integer(int value),将int值封装成对象
回复 使用道具 举报
车风波 发表于 2012-6-29 08:55
把代码拆开:
new Integer(s1.length()) 这个Integer用自己的compareTo方法去和new Integer(s2.length())做 ...

原来如此,多加一个括号就明了了。少了那个括号总会让初学者误解。谢谢了。
回复 使用道具 举报
其实最明了的是这样
integer len1=...
integer len2=...
int num = len1.compareTo(len2);   
你写成原来那样不见得会快多少....但是括号多了容易错

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
这个很简单啊
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));              
就是调用了一个方法啊compareTo我把API的方法拷过来给你看看,你就空白了啊
public int compareTo(Integer anotherInteger)
Compares two Integer objects numerically.

Specified by:
compareTo in interface Comparable<Integer>
Parameters:
anotherInteger - the Integer to be compared.
Returns:
the value 0 if this Integer is equal to the argument Integer; a value less than 0 if this Integer is numerically less than the argument Integer; and a value greater than 0 if this Integer is numerically greater than the argument Integer (signed comparison).
Since:
1.2
回复 使用道具 举报
柯玲 中级黑马 2012-6-29 10:49:31
7#
1,因为String的length()方法返回的是int类型,而int类型没有compareTo()比较方法,若要简写成LZ红色字体部分的格式只能通过int类型的包装器类Integer的对象,可以查看API,Integer是实现了Comparable<Integer>接口的,当然也就重写了compareTo方法。
2,此处写new的原因也就是通过创建对象调用方法
3,调用compareTo方法后返回值类型为int
从此处看出LZ的代码并不完全,若用new Integer()的方式看不懂,我建议您用以下方式写:
  1.   public int compare(Object o1,Object o2){
  2.       String s1=(String)o1;
  3.           String s2=(String)o2;
  4.           if(s1.length()>s2.length()){
  5.             return 1;
  6.           }
  7.           if(s1.length()==s2.length()){
  8.              return s1.compareTo(s2);
  9.           }
  10.           return -1;
  11.   }
复制代码

点评

代码有待优化  发表于 2012-6-29 11:45

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
这个我刚开始也看不懂,视频里面老师说了好像是省事的写法。其实看仔细点就明白了.
Integer(s1.length()).compareTo(new Integer(s2.length()));这个你能看懂的话,前面加的new跟后面的意义一样的。
用空格隔开写给你看:int num =          new Integer(s1.length()).          compareTo          (new Integer(s2.length()));        
这样不就so easy了么,呵呵。      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马