对Java中将Object转成String的思考

1.问题

在开发中,有很多时候需要将Object类型转成String。如调用一个方法,其返回的类型是Map类型,当对返回结果进行解析时,很可能需要将Object类型的value转成String类型,那么怎么转换是比较好的方式呢?

2.实现方式及分析

常用的方式应该有如下三种:

public class ToStringTest {	
	@SuppressWarnings("unused")
	public static void main(String[] args) {
		//从接口中获取到的
		Map<String, Object> resultMap = new HashMap<String, Object>();
		resultMap.put("strKey", "1");
		resultMap.put("intKey", new Integer(1));
		
		//将结果中某个字段转换成String类型
		//情形1
		String aStr1 = (String) resultMap.get("strKey"); 		//方式1-1
		String aStr2 = resultMap.get("strKey").toString();		//方式1-2
		String aStr3 = String.valueOf(resultMap.get("strKey"));	//方式1-3
		
		//情形2
		String bStr1 = (String) resultMap.get("intKey");		//方式2-1 -> 类型转换异常
		String bStr2 = resultMap.get("intKey").toString();		//方式2-2
		String bStr3 = String.valueOf(resultMap.get("intKey"));	//方式2-3
		
		//情形3
		String Str1 = (String) resultMap.get("nullKey");		//方式3-1
		String cStr2 = resultMap.get("nullKey").toString();		//方式3-2 --> 空指针异常
		String cStr3 = String.valueOf(resultMap.get("nullKey"));//方式3-3		
	}
}

做个简单分析:
以上代码对将Map中的Object转换成String类型的三种方式进行了比较:

  • 对于情形1,即Object类型的value所指向的对象原来就是String时,这三种方式都是可以的
  • 对于情形2,即Object类型的value所指向的对象原来是int类型时,使用(String)这种方式强转会出现ClassCastException。出现类型转换异常是因为将从Map中get得到Object类型通过(String)的方式强转成String类型前,会进行类型检查,发现Object类型的value指向的对象并不是String类型,所以会出现ClassCastException。这个可通过对代码进行反编译看出:对Java中将Object转成String的思考_第1张图片
  • 对于情形3,即获取的key在Map中不存在时,使用toString()方式进行转换会出现NullPointerException。出现NPE很好理解,因为从Map中get得到的是null,对null调用toString()方法自然会出现空指针。这里还需要注意的是,使用方式3-1、3-3转换后得到的不是null,而是字符串"null"。当需要对转换后的字符串进行比较时特别需要注意这一点

3.总结

通过以上分析,个人认为还是使用String.valueOf()的方式将Object类型转换成String类型会比较稳妥,但是需要注意null通过String.valueOf()转换后得到的是"null"(字符串)。
以上内容只是个人看法,如有错误之处,欢迎各位指正。

你可能感兴趣的:(Java)