迭代器中null对象经String.valueOf处理为何无异常且值为'null'?
问题解答
先看你给出的代码:
List<String> wideTableData = new ArrayList<>(); wideTableData.add(null); wideTableData.add(null); Iterator<String> iterator = wideTableData.iterator(); while (iterator.hasNext()) { String firstValue = String.valueOf(iterator.next()); System.out.println(Strings.isNullOrEmpty(firstValue)); System.out.println(firstValue.equals("null")); }
之所以调用String.valueOf时没抛异常,反而得到字符串"null",核心原因是这个方法的内部实现专门处理了null参数的情况:
- 当传入的参数是null时,
String.valueOf(Object obj)会直接返回字符串常量"null" - 当参数不为null时,才会调用该对象的
toString()方法来生成字符串
所以你代码里每次迭代取出的都是null,传入String.valueOf后就得到了"null"字符串,自然不会触发空指针异常,后续判断firstValue.equals("null")会返回true,而Strings.isNullOrEmpty(firstValue)会返回false(因为这个字符串既不是null也不是空串)。
内容的提问来源于stack exchange,提问作者new javaer
相关产品推荐
相关产品推荐

