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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林贺 中级黑马   /  2012-6-7 10:44  /  1805 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  在讲TreeSet 集合的时候,在覆写compare方法的时候,在条件判断的时候简化的了书写,为什么再用Integer 类里的compareTo 方法的时候,第二参数,为什么不直接写,而是通过new Integer() 的构造函数通过比较呢?  
   
     String str="aabbcc";
     String str1="bbcc";
     int num=new Integer(str.length()).compareTo(new Integer(str1.length()));
  
     为什么不直接写成
     
    int num=new Integer(str.length()).compareTo(str1.length());
     

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
str.length()返回的是一个int类型,不是一个对象,不能传入compareTo()方法中作为参数,compareTo接受的是一个对象。
回复 使用道具 举报
str.length()和str1.length()的返回类型是int基本类型,其没有compareTo方法。要变成其包装类Integer后才调用得到compareTo方法。
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

回复 使用道具 举报
写成int num=new Integer(str.length()).compareTo(str1.length());就是一个Integer类和int基本类比,两者不是同一种类型,无可比性。所以要int num=new Integer(str.length()).compareTo(new Integer(str1.length()));这样两者都是Integer类了。

回复 使用道具 举报
  为什么我自己已经测试了,int num=new Integer(str.length()).compareTo(str1.length());运行也没有问题啊。
回复 使用道具 举报
应该是自动装箱和拆箱弄的。把str1.length()装成了Integer类了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
应该可以 因为自动装箱机制...
回复 使用道具 举报
付信榕 发表于 2012-6-7 10:54
应该是自动装箱和拆箱弄的。把str1.length()装成了Integer类了。

嗯,应该就是新特性的原因。 一会我自己下载一个低版本的jdk ,我自己在测试下吧 谢谢了。
回复 使用道具 举报
罗文杰 发表于 2012-6-7 10:49
str.length()返回的是一个int类型,不是一个对象,不能传入compareTo()方法中作为参数,compareTo接受的是 ...

  明白了,知道为什么我的二个有结果了。
回复 使用道具 举报
马林贺 发表于 2012-6-7 10:51
为什么我自己已经测试了,int num=new Integer(str.length()).compareTo(str1.length());运行也没有问题 ...

2楼正解!!


String类的length()会被自动装箱成Integer。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马