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