java无法理解:如果指定的数组中的任何一个包含自己作为元素,则此方法的行为是未定义的
我目前正在阅读数组类上的Java API,对于deepEquals(Object[]a1,Object[]a2)方法,我遇到了以下短语:
If either of the specified arrays contain themselves as elements either directly or indirectly through one or more levels of arrays, the behavior of this method is undefined.
我似乎不完全理解这个短语的真正含义
# 1 楼答案
它表示如果数组的名称为a1,且a1[i]=a1;我<;a1。长度,则方法行为未定义。这是因为如果该方法继续单独检查每个元素,那么在某个点上它可能会进入无限递归
# 2 楼答案
如果传递给此方法的数组包含自身,那么测试它是否等于另一个数组可能会导致无限递归(以StackOverflowerr结尾),因为数组中总会有一个元素本身就是数组,所以您将有一个级别进行比较
它可能不会在所有情况下导致无限递归,因为例如,如果两个比较数组的第一对元素不是数组,并且两个元素不相等,则该方法可能会返回false,而不会检查其余数组
这可能就是这种情况下没有定义行为的原因,因为当这样的输入被传递到方法时,可能不可能返回正确的输出(甚至不可能在没有异常发生的情况下返回任何内容)
例如:
此数组包含自身,因此将其传递给
deepEquals
可能会导致无限递归