如何避免空指针异常并完整打印含空元素的Integer数组?
解决数组含null元素时
Arrays.sort降序排序的空指针问题 问题原因
你使用Collections.reverseOrder()作为排序比较器时,默认的Integer比较逻辑无法处理null元素——当比较器尝试访问null对象的内部字段时,就会抛出NullPointerException。
解决方案:自定义比较器处理null元素
通过自定义Comparator,明确指定null元素的排序规则(比如把null放在数组末尾),就能避免空指针错误,同时完整保留并打印整个数组的所有元素。
修改后的代码示例:
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int number = sc.nextInt(); Integer array[] = new Integer[10]; for (int j = 0; j < number; j++) { array[j] = sc.nextInt(); } // 自定义比较器:降序排序非null元素,null放在末尾 Arrays.sort(array, (a, b) -> { if (a == null && b == null) return 0; if (a == null) return 1; // null元素排在后面 if (b == null) return -1; return Integer.compare(b, a); // 非null元素降序排列 }); System.out.println(Arrays.toString(array)); sc.close(); } }
代码说明
- 当两个元素都是
null时,视为相等,返回0; - 当其中一个元素是
null时,指定null排在非null元素的后面; - 非
null元素通过Integer.compare(b, a)实现降序排序(如果要升序则用Integer.compare(a, b)); - 执行排序后,
Arrays.toString()会完整输出数组的所有元素,包括未赋值的null位置。
内容的提问来源于stack exchange,提问作者Pronay Sarker
相关产品推荐
相关产品推荐

