是否将参数传递给定义的方法(在Java中)?例如,在代码段
中 Arrays.equals(ascendingSegment, Arrays.sort(ascendingSegment))
用于检查数组是否实际上按升序排序,我保证在调用sort方法之前传入原始数组吗?
修改
好像有点误会。在第一个参数传递之前,equals
方法是否在排序之前获取了ascendingSegment的副本,或者是第一个调用的排序?给定{1, 5, 2, 4}
之类的数组,equals方法会将{1, 5, 2, 4}
和{1, 2, 4, 5}
作为参数或{1, 2, 4, 5}
的两个副本吗?
答案 0 :(得分:6)
如果您使用调试器逐步执行它并逐步执行它,您将看到所有参数都被计算,然后调用该函数。
我还会说尝试做你发布的内容是一种不好的做法。在测试对象时,您不应该对该对象执行任何会使其变异的操作。在该方法调用之后,您将无法在测试之前显示列表的顺序。
修改强>
Arrays.sort()
没有返回值,它就地排序了。因此你不能像这样使用它。您应该使用Arrays.copyOf()
制作数组的副本,对副本进行排序,然后比较两个数组。
答案 1 :(得分:1)
Java遵循按值传递。
传值意味着当您调用方法时,会将每个实际参数的值的副本传递给该方法。您可以在方法内更改该副本,但这对实际参数没有影响。
因此,在您的示例中,您的数组将首先进行排序,然后传递给Array.equals
方法。
您的困惑可能是因为您正在考虑 Pass-by-reference 。这是一个解释为什么Java 按值传递的问题:Is Java "pass-by-reference" or "pass-by-value"?
答案 2 :(得分:1)
首先,您的示例将无法编译,因为Arrays.sort(...)
不会返回任何内容。
其次,如果(假设)Arrays.sort(...)
确实返回了某些东西,那么它将取决于它返回的内容。
如果(假设的)Arrays.sort(...)
返回了原始数组的已排序的副本,那么
Arrays.equals(ascendingSegment, Arrays.sort(ascendingSegment));
将使用两个不同的数组参数调用;即原始数组和分类副本。
如果(假设的)Arrays.sort(...)
在完成就地排序后返回了原始数组,那么
Arrays.equals(ascendingSegment, Arrays.sort(ascendingSegment));
等同于:
Arrays.sort(ascendingSegment);
Arrays.equals(ascendingSegment, ascendingSegment);
注意: