黑马程序员技术交流社区

标题: 关于简化书写的一下小疑惑 [打印本页]

作者: 马林贺    时间: 2012-6-7 10:44
标题: 关于简化书写的一下小疑惑
  在讲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());
     

作者: 罗文杰    时间: 2012-6-7 10:49
str.length()返回的是一个int类型,不是一个对象,不能传入compareTo()方法中作为参数,compareTo接受的是一个对象。
作者: 付信榕    时间: 2012-6-7 10:49
str.length()和str1.length()的返回类型是int基本类型,其没有compareTo方法。要变成其包装类Integer后才调用得到compareTo方法。
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。


作者: 付信榕    时间: 2012-6-7 10:51
写成int num=new Integer(str.length()).compareTo(str1.length());就是一个Integer类和int基本类比,两者不是同一种类型,无可比性。所以要int num=new Integer(str.length()).compareTo(new Integer(str1.length()));这样两者都是Integer类了。


作者: 马林贺    时间: 2012-6-7 10:51
  为什么我自己已经测试了,int num=new Integer(str.length()).compareTo(str1.length());运行也没有问题啊。
作者: 付信榕    时间: 2012-6-7 10:54
应该是自动装箱和拆箱弄的。把str1.length()装成了Integer类了。
作者: 姚玉鹏    时间: 2012-6-7 10:58
应该可以 因为自动装箱机制...
作者: 马林贺    时间: 2012-6-7 10:58
付信榕 发表于 2012-6-7 10:54
应该是自动装箱和拆箱弄的。把str1.length()装成了Integer类了。

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

  明白了,知道为什么我的二个有结果了。
作者: 徐炯    时间: 2012-6-7 16:07
马林贺 发表于 2012-6-7 10:51
为什么我自己已经测试了,int num=new Integer(str.length()).compareTo(str1.length());运行也没有问题 ...

2楼正解!!


String类的length()会被自动装箱成Integer。




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