在Java中的CompareTo方法表现得很奇怪

时间:2012-08-30 10:59:59

标签: java

我在java中遇到compareTo方法的问题,这是代码:

for(int i = 0; i < btFolder.size(); i++) {

        String g = btFolder.get(i).toString();

        String[] subf = g.split(splitchar);

        String s = subf[subf.length-1].toUpperCase();

        if(s.compareTo(bt.toUpperCase()) == 0) {
            return g; 
        }
    }
    return null; //not found!

这不会跳到if-statement,因为sbt变量是相等的,我知道因为我完成了我的作业并对其进行了调试。只是想弄清楚我写这段代码的compareTo方法返回:

        String g = btFolder.get(i).toString();

        String[] subf = g.split(splitchar);

        String s = subf[subf.length-1].toUpperCase();

        String btUp = bt.toUpperCase();

        int theSame = s.compareTo(btUp);

        if(theSame == 0) {
           putSharedPrefs("pathToBt", g); 
        }
        return null; 

变量theSame为0,表示sbtUp相等。而且,the if-statement永远不会被执行!

为什么会这样?对此有什么好的解决方案?

修改

我也试过这个:

boolean equals = s.equalsIgnoreCase(bt);

        if(equals) {
            return g; 
        }

booleantrue,但永远不会原谅if-statement,我还应该提到这是在thread内完成的,但这不会导致任何问题?

2 个答案:

答案 0 :(得分:2)

在此代码段中

if(theSame == 0) {
       putSharedPrefs("pathToBt", g); 
}

如果您可以调试并检查theSame是否为0,那么请输入 sysout 并查看是否已打印。

因为你很确定如果没有被执行;看来你正在调试的代码和正在执行的代码是不一样的。当部署未部署并且您正在使用旧的可执行文件调试新源时,这有时会发生在eclipse中。

答案 1 :(得分:0)

为什么不这样做:

if (s.equalsIgnoreCase(bt) {
    return g; 
}

我想你可以使用compareTo,但它也会做其他事情......