Java compareTo方法(在Comparable接口中)是递归的吗?

Java compareTo方法(在Comparable接口中)是递归的吗?,java,recursion,Java,Recursion,我正在实现可比较的界面,并使用它来比较运动队的名称。我注意到这是compareTo方法最简单的实现。我想知道为什么方法compareTo在方法体中引用它自己。这不是某种永无止境的递归吗?如何通过将方法定义为自身来实现它 public int compareTo(Team x) { return teamName.compareTo(x.teamName); } teamName可能是一个字符串。 因此它使用String.compareTo()方法。teamName可能是一个字符串。 因

我正在实现可比较的界面,并使用它来比较运动队的名称。我注意到这是compareTo方法最简单的实现。我想知道为什么方法compareTo在方法体中引用它自己。这不是某种永无止境的递归吗?如何通过将方法定义为自身来实现它

public int compareTo(Team x)
{
    return teamName.compareTo(x.teamName);
}

teamName
可能是一个
字符串

因此它使用
String.compareTo()
方法。

teamName
可能是一个
字符串。

因此,它使用
String.compareTo()
方法。

您没有提供让您感到困惑的完整代码,但您提供的方法可能属于某个包的类
Team
,并且该类的
teamName
字段的类型可能不同于
Team
(我假设它是
java.lang.String
)。在这种情况下,您提供的方法根本不是递归的。方法
some.package.Team.compareTo(some.package.Team)
调用方法
java.lang.String.compareTo(java.lang.String)
,这是一个完全独立的方法。

您没有提供让您感到困惑的完整代码,但是您提供的方法可能属于某个包的类
团队
,并且该类的
团队名
字段可能是与
团队
不同的类型(我假设它是
java.lang.String
)。在这种情况下,您提供的方法根本不是递归的。方法
some.package.Team.compareTo(some.package.Team)
调用方法
java.lang.String.compareTo(java.lang.String)
,这是一个完全独立的方法。

如果
teamName
类型为
String
String,则调用该字符串。

如果
teamName
类型为
String
String,则调用该字符串。

这两个方法甚至不会在同一对象上调用,尽管这本身不是调用的必要条件为完整起见,我要补充的是,这两个方法恰好具有相同的名称(因为
Comparable
接口需要相同的名称),即使它们完全不同。根据递归的定义,一个方法要递归,它必须调用自身,但事实并非如此。例如,两个个体并不相同,只是因为它们碰巧都被称为Smith。这两个方法甚至没有在同一个对象上调用,尽管这本身不是必要的c调用被描述为递归的条件。为了完整起见,我要补充的是,这两个方法恰好具有相同的名称(因为
Comparable
接口需要相同的名称),即使它们是完全不同的。根据递归的定义,一个方法要递归,它必须调用自身,但事实并非如此。例如,两个个体并不相同,只是因为它们碰巧都被称为Smith。
teamName
this
相同吗?啊。对不起,如果我给你造成任何混乱,bec因为我在上一个问题的答案中给了你那段代码,没有对它进行充分解释。但是下面的答案是正确的:
teamName
是一个字符串。Team的compareTo方法是通过遵从其字符串字段的compareTo方法来实现的。但是递归并不是永无止境的,因为String.compareTo不调用任何字符串其他compareTo方法;它是根据对基元元素的操作来实现的。(实际上,您可以根据自身来实现一个方法;例如,
intx(){return x();}
,但是如果您调用它,它会爆炸!)
teamName
this
相同吗?啊,如果我给你带来了任何困惑,很抱歉,因为我在回答你之前的问题时给了你那段代码,但没有完全解释它。但是下面的答案是正确的:
teamName
是一个字符串。Team的compareTo方法是通过遵从的compareTo方法来实现的但是递归并不是永无止境的,因为String.compareTo不调用任何其他compareTo方法;它是根据对基本元素的操作来实现的。(实际上,您可以根据自身来实现一个方法;例如,
int x(){return x();}
,但如果调用它,它会爆炸!)