Java 我的程序似乎忽略了我编写的compareTo()

Java 我的程序似乎忽略了我编写的compareTo(),java,compareto,Java,Compareto,我得到了代码,必须填写比较部分。无论出于何种原因,即使我将我的比较注释为代码,当我调用它时,Java仍然会给我一个结果,这让我相信我一定是调用错了。我对这个感到困惑 import java.util.Arrays; public class testString implements Comparable<testString> { String tempStr; public testString(String str) { tempStr =

我得到了代码,必须填写
比较部分。无论出于何种原因,即使我将我的
比较注释为
代码,当我调用它时,Java仍然会给我一个结果,这让我相信我一定是调用错了。我对这个感到困惑

import java.util.Arrays;

public class testString implements Comparable<testString> {
    String tempStr;

    public testString(String str) {
        tempStr = str;
    }

    public String toString() {
        return tempStr;
    }

    public int compareTo(testString Str2) {
        String temp = Str2.toString();
        int temp1 = temp.length();

        if (tempStr.length() > temp1) {
            return 1;
        } else if (tempStr.length() < temp1) {
            return -1;
        } else {
            return 0;
        }      
    }  

    public static void main(String[] args) {   
        String [] Array1 = new String[]{"dog","giraffe","python","emu","elephant","cow"};

        System.out.print(Array1[1].compareTo(Array1[0]));
    }
}    
导入java.util.array;
公共类testString实现了可比较的{
字符串tempStr;
公共测试字符串(字符串str){
tempStr=str;
}
公共字符串toString(){
返回tempStr;
}
public int compareTo(testString Str2){
字符串temp=Str2.toString();
int temp1=临时长度();
if(tempStr.length()>temp1){
返回1;
}else if(tempStr.length()
在main方法中创建的数组包含
String
对象,而不是
testString
对象。如果要比较
testString
类的实例,请创建这些对象的数组

testString[] array1 = new testString[]{new testString("dog")...};

还要注意类名应该大写,变量以小写字母开头

因为
Array1
字符串的数组因此它从
String
调用
compareTo

您可能想要的是:

TestString[] array1 = new TestString[] {
    new TestString("dog"),
    new TestString("giraffe"),
    new TestString("python"),
    new TestString("emu"),
    new TestString("elephant"),
    new TestString("cow")
};

System.out.print(array1[1].compareTo(array1[0]));
作为旁注:

  • Java中的类按惯例以大写字母开头(
    TestString
  • Java中的变量按约定以小写字母开头(
    array1
  • 您应该使用
    @Override
    注释:

    @Override
    public String toString() {...}
    @Override
    public int compareTo(...) {...}
    
    这将导致编译器错误,并在出现问题且您没有实际重写时发出警告。(例如,输入错误或参数类型不正确时发生。)


谢谢,我会确保遵守约定,我没有意识到这一点。这真的是一件小事,它只是让习惯了约定的Java程序员更容易阅读。这里突出显示的语法也使用它作为提示。另外,如果我想从同一个包中的另一个类调用这个compareTo方法,我是否需要做同样的事情,在不同的类中创建如上所述的数组?这取决于你想做什么,但这听起来很合理。找到答案的最好方法就是尝试一下。