修改参数是不好的做法

时间:2014-01-15 08:06:06

标签: java

java中的二进制搜索代码使用以下代码:

public static int binarySearch(int[] a, int fromIndex, int toIndex,
                                   int key) {
        rangeCheck(a.length, fromIndex, toIndex);
        return binarySearch0(a, fromIndex, toIndex, key);
    }

    // Like public version, but without range checks.
    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            int midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }

为什么需要将fromIndex复制到lowtoIndexhigh? 保持参数值不被修改是一种好的做法吗?

可能有以下修改:

binarySearch0(a, fromIndex, toIndex - 1, key);
    }

    // Like public version, but without range checks.
    private static int binarySearch0(int[] a, int low, int high,


        while (low <= high) {

基本上我试图了解它是否有某种意图或有一些好的做法。

5 个答案:

答案 0 :(得分:1)

保持参数不被修改是一个好习惯,最好将它们声明为final。 这也提高了方法的可读性。

答案 1 :(得分:1)

根据我的经验,特别是在参数是基元的情况下,复制参数和编写类似的方法以便于调试很有用 - 许多调试器提供了“重启”运行特定方法的功能,以及参数已被修改,然后它将使用修改后的参数而不是原始参数。

答案 2 :(得分:0)

由于所有参数都是基元,因此无论是否修改它们都无关紧要。

答案 3 :(得分:0)

有些人会说这是不好的风格,但并不需要。如果您想明确不修改它们,请将字段设为最终字段。

对于长时间的方法,我认为这是一个好主意,因为它使事情变得更清楚(你可能会忘记某些方法已被某种方法进一步修改,如果你以后再回到它并进一步使用它)。对于简短的方法,无论如何都很清楚发生了什么。

答案 4 :(得分:0)

使用递归进行搜索,这样就不需要修改低参数和高参数