使用compareTo和instanceOf比较String和Integer

时间:2011-09-21 10:42:22

标签: java string compareto

我有一个代码片段,我无法理解它到底是做什么的。 此代码位于JavaBean ..

private Object myNumb;

//then getter and setter for this

public int compareTo(myRptObj o){

        if (myNumb instanceof String && o.myNumb instanceof Integer) {
          return_value =  1;
        } else if (myNumb instanceof Integer && o.myNumb instanceof String) {
          return_value = -1;
        } else if (myNumb instanceof String && o.myNumb instanceof String) {
          return_value = ((String) myNumb).compareTo((String)o.myNumb);
        } else if (myNumb instanceof Integer && o.myNumb instanceof Integer) {
          return_value = ((Integer) myNumb).compareTo((Integer)o.myNumb);
        }

}

我想了解compareTo以及String和Integer的比较是如何完成的? myNumb可以是IntegerString类型。

4 个答案:

答案 0 :(得分:1)

该代码段确保任何 Integer的比较 String

Integer - IntegerString - String比较按照您的预期进行。

答案 1 :(得分:1)

前两个if子句确保字符串被认为大于整数。第二个两个if子句将字符串之间的比较和整数之间的比较委托给这些类的compareTo()实现,以便它们像往常一样排序。

请注意,拥有这种代码的非常非常糟糕的设计,其中变量可以是“X或Y型” - 正是因为它迫使您编写这样的代码。 / p>

相反,决定一种类型并在必要时转换为该类型。

答案 2 :(得分:0)

  

......究竟是什么。

基本上:字符串大于整数,如果两者都是相同类型,则使用它们的自然顺序(比较2个字符串或2个整数)。

答案 3 :(得分:0)

由于 myNumb 可以是字符串整数 compareTo 正在检查它们的类型。如果它们不是同一类型(一个是整数,一个是字符串),则它们不相等,因此根据需要返回1或-1。如果它们属于同一类型,则将它们转换为该类型并委托给该类型的compareTo。