使用String.valueOf()的坑

说明:记录一次使用String.valueOf()的坑,以下是一段有问题的代码:

	String count = String.valueOf(listData.get(0).get(0).get("count");
	if (StringUtils.isBlank(count) || "0".equals(count)) {
	    result.setResult(page);
	    return result;
	}

问题分析

其中,listData是调用数据库存储过程,返回的数据集合,是List类型的,表示多个结果集,每个结果集有多条数据,而结果集1,通常表示记录的总条数,即count;

这段代码就是将第1个结果集中的count字段值获取出来,并转换为字符串。

正常情况,这段代码是没有问题的,后面也对count的值做了校验,如果count值为null或者0(StringUtils.isBlank(count) ),都不会往下走;


现在的问题是,当listData中,第1个结果集中没有count时,这段代码就有问题了。

使用String.valueOf()的坑_第1张图片

问题是这个方法,当调用存储过程返回的结果集中,没有count这个结果集,String.valueOf()里面的内容是null,所以String count会得到一个“null”字符串,而在下面的if判断中,StringUtils.isBlank(count)的返回结果会是false,这样就跳过了对count的空值判断

String.valueOf()

为什么null会被转为一个字符串呢?我们分析一下这个方法,如下:

	// 方式一:将一个对象赋值为null,然后调用String.valueOf()方法
	String str = null;
	System.out.println(String.valueOf(str));
	
	// 方式二:直接将null作为参数传入
	System.out.println(String.valueOf(null));

这两种方式,前一种会打印“null”,后一种会报空指针异常;

使用String.valueOf()的坑_第2张图片

也就是说,声明了的对象,赋值为null,作为参数传入String.valueOf()会返回null字符串。所以在上面的代码中,不能使用String.valueOf()将取出的值再转为String类型。修改如下:

	String count = listData.get(0).get(0).get("count");
	if (StringUtils.isBlank(count) || "0".equals(count)) {
	    result.setResult(page);
	    return result;
	}

你可能感兴趣的:(数据库,java,字符串)