java - Comparable 和 Object 类型的区别

标签 java comparable

目前正在进行一项作业,将Comparable 的概念应用到应用中。

我编写了这个允许输入 Comparable[] 数组的简单方法。此方法返回任何给定数组输入的最小值。使用 .compareTo() 方法,我能够真正扩展此方法以允许任何对象类型,无论它是自定义实现,如 Point 类(我们完成作业,但未在此处显示)。

public static Comparable getMinimum(Comparable[] inputArray)
{
    Comparable newObj = inputArray[0];
    for(int i = 0; i < inputArray.length; i++)
    {
        Integer retValue = (inputArray[i]).compareTo(newObj);
        if(retValue < 0)
        {
            newObj = inputArray[i];
        }
    }
    return newObj;
}

我的问题是 - 这个 Comparable 类型是什么?查看 Java API,它并没有真正透露太多。为什么我们使用 Comparable 类型而不是 Object 类型,后者还包括 intdouble 等类型, String, 等等?

最佳答案

可比较类型是一个引用类型,其类 C实现 Comparable<C>界面。该接口(interface)定义了一个方法:int compareTo(<T> other) .阅读 javadoc了解详情。

  • 基本类型(例如 intdouble )不是 Comparable在这个意义上,因为基本类型不是引用类型。

  • 类型Object是引用类型,但它不是可比较的,因为它没有实现 Comparable<Object> .

  • 类型String是引用类型,它实现了 Comparable<String> .因此它是一个可比较的类型。这从 String 的 javadoc 中可以清楚地看出:

    public final class String extends Object
        implements Serializable, Comparable<String>, CharSequence
    

primitive types之间的区别引用类型是 Java 的基础。原始类型是 boolean , byte , char , short , int , long , floatdouble .引用类型是 Java 类和 Java 数组类型。


现在在您的示例中,您实际上使用的是 Comparable接口(interface)作为原始类型。如果您使用 Java 5 或更高版本的编译器编译此代码,它将向您发出有关使用原始类型的编译器警告。这并没有实质性地改变答案,但实际上你现在正在有效地谈论实现 Comparable<?>相反 Comparable<T>该方法实际上是 compareTo(Object) .

关于java - Comparable 和 Object 类型的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024879/

相关文章:

java - 如何从 6 个数字循环中取出前 3 个随机数?

FilenameFilter 的 java 8 lambda 表达式

java - MongoDB : Sorting Data when using DBcollection find

java - Java 中 Comparable.compareTo 的返回值是什么意思?

java - Netbeans java 使用 Comparable 排序

java - 四元数比较?

Java 日期比较 : Dates in different formats

java - JBoss CLI - 通过模式匹配取消部署

java - 比较方法

java - 通用二分搜索 - JAVA -