无法在Java中检查null

时间:2018-11-09 19:48:37

标签: java

我写了这段代码,但我不明白为什么我不能检查数组中的null。

public static int[] maxArr(int[] a, int[] b) {
    int[] newArray = new int[Math.max(a.length, b.length)];
    int min = Math.min(a.length, b.length);
        for (int i = 0; i < min; i++) {
            if (a[i] >= b[i]) {
                newArray[i]=a[i];
            } else {
                newArray[i]=b[i];
            }
        }




        for (int j = min; j < newArray.length; j++) {
            if (b[min] == null) {
                newArray[j] = a[j];
            }
            else {
                newArray[j] = b[j];
            }
        }

        return newArray;
        }

这是错误:

error: bad operand types for binary operator '=='
            if (b[min] == null) {
                       ^
first type:  int
second type: <null>
1 error

我是编程新手,所以在此先谢谢

2 个答案:

答案 0 :(得分:2)

您具有原始类型int的数组。并且基元永远不会具有null值。默认情况下,int变量将分配0值。您可能需要切换到包装类Integer才能使用null检查未初始化的值。

答案 1 :(得分:0)

就像我说过的,您不能将原始整数与null进行比较,您可以采用另一种方法来实现相同的结果。

您的第一个循环很好,如​​果要从较大的数组中复制剩余的整数,可以使用System.arraycopy方法。您可以将您的方法修改为这样,

public static int[] maxArr(int[] a, int[] b) {
    int[] newArray = new int[Math.max(a.length, b.length)];
    int min = Math.min(a.length, b.length);
    for (int i = 0; i < min; i++) {
        if (a[i] >= b[i]) {
            newArray[i] = a[i];
        } else {
            newArray[i] = b[i];
        }
    }

    if (a.length > b.length) {
        System.arraycopy(a, min, newArray, min, a.length - min);
    } else {
        System.arraycopy(b, min, newArray, min, b.length - min);
    }

    return newArray;
}

这也为您提供了与第二遍for循环一样的效果。

尝试使用以下代码对其进行测试,

public static void main(String args[]) throws Exception {
    int[] a = new int[] { 2, 7, 2, 8 };
    int[] b = new int[] { 4, 6, 3, 9, 5, 8, 7};
    int[] max = maxArr(a, b);

    System.out.println(Arrays.stream(max).boxed().collect(Collectors.toList()));
}

这将根据需要打印以下输出

[4, 7, 3, 9, 5, 8, 7]