有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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.

我似乎不完全理解这个短语的真正含义


共 (2) 个答案

  1. # 1 楼答案

    它表示如果数组的名称为a1,且a1[i]=a1;我<;a1。长度,则方法行为未定义。这是因为如果该方法继续单独检查每个元素,那么在某个点上它可能会进入无限递归

    Object[] a1 = new Object[5];
    a1[0] = a1; // array is an element of itself
    Object[] a2 = new Object[5];
    deepEquals(a1,a2); //behavior is undefined
    
  2. # 2 楼答案

    如果传递给此方法的数组包含自身,那么测试它是否等于另一个数组可能会导致无限递归(以StackOverflowerr结尾),因为数组中总会有一个元素本身就是数组,所以您将有一个级别进行比较

    它可能不会在所有情况下导致无限递归,因为例如,如果两个比较数组的第一对元素不是数组,并且两个元素不相等,则该方法可能会返回false,而不会检查其余数组

    这可能就是这种情况下没有定义行为的原因,因为当这样的输入被传递到方法时,可能不可能返回正确的输出(甚至不可能在没有异常发生的情况下返回任何内容)

    例如:

    Object[] objArr = new Object[1];
    objArr[0] = objArr;
    

    此数组包含自身,因此将其传递给deepEquals可能会导致无限递归