java Object转String的4种实现方式
1.情景展示
在实际开发过程中,经常会遇到将Object类型强转成String类型。
Object转String一共有几种实现方式?
2.具体分析
共有4种实现方式。
3.解决方案
以Map<String, Object>进行举例说明。
Map<String, Object> map = new HashMap<>(3);
map.put("k1", "v1");
map.put("k2", 2);
map.put("k3", "");
map.put("k4", null);
方式一:强制转换
key=k1可以进行强制转换成String类型,因为它本身就是String类型。
String k1 = (String) map.get("k1");
System.out.println(k1);// v1
key=k2,不能强转成String类型,因为它的值是int类型。
String k2 = (String) map.get("k2");// 类型转换异常
key=k3,它对应的值,虽然是空字符串,但本质上也是String类型,所以可以转String。
String k3 = (String) map.get("k3");
System.out.println(k3);// 空字符串""
key=k4,它对应的值为null,即不存在。虽然强转不会报错,但它对应的值依旧为:空对象null。
String k4 = (String) map.get("k4");
System.out.println(k4);// 空对象null
System.out.println(k4 == null);// true
System.out.println("null".equals(k4));// false
key=k5,由示例可知, map对象当中,没有k5,这个键(不存在的键),进行强制转换时,会发生什么?
// 不存在的key
String k5 = (String) map.get("k5");
System.out.println(k5);// 空对象null
System.out.println(k5 == null);// true
System.out.println("null".equals(k5));// false
当从map对象当中取不存在的键时,返回的值自然是空对象null。
这样一来就和key=k4,没有太大的区别了。(只不过是:k4存在,值为null;k5不存在,值必然为null)
弊端:类型转换异常
方式二:toString()
我们知道,toString()方法,是将对象转换成String类型的方法。
k1的值本身就是String类型
String k1 = map.get("k1").toString();
System.out.println(k1);// v1
k2的值是Integer类型,调该方法后,会转换成string类型。
// 将Integer类型转换成了String类型
String k2 = map.get("k2").toString();
System.out.println(k2);
System.out.println(k2.equals("2"));// true
k3的值,本身也是String类型。
String k3 = map.get("k3").toString();
System.out.println(k3);// 空字符串""
k4和k5的值都是空对象null,调toString(),自然就会报空指针。
// 空指针异常
String k4 = map.get("k4").toString();
弊端:空指针异常
方式三:String.valueOf()(推荐使用)
String.valueOf()是将其它数据类型转换成String类型。
k=k1
String k1 = String.valueOf(map.get("k1"));
System.out.println(k1);// v1
k=k2,Integer类型会被转成String类型
// 将Integer类型转换成了String类型
String k2 = String.valueOf(map.get("k2"));
System.out.println(k2);
System.out.println(k2.equals("2"));// true
k=k3,空字符串"",本身就是String类型
String k3 = String.valueOf(map.get("k3"));
System.out.println(k3);// 空字符串""
k=k4和k=k5,空对象null被转成了字符串"null"
String k4 = String.valueOf(map.get("k4"));
System.out.println(k4);// 字符串null
System.out.println(k4 == null);// false
System.out.println("null".equals(k4));// true
String k5 = String.valueOf(map.get("k5"));
System.out.println(k5);// 字符串null
System.out.println(k5 == null);// false
System.out.println("null".equals(k5));// true
基本数据类型会被自动转换成String类型。
弊端:null对象会被转换成字符串"null"
方式四:+""(推荐使用)
这种方式,同样是将数据类型转成String类型。
效果与方式三完全一致。
String k1 = map.get("k1") + "";
System.out.println(k1);// v1
// 将Integer类型转换成了String类型
String k2 = map.get("k2") + "";
System.out.println(k2);
System.out.println(k2.equals("2"));// true
String k3 = map.get("k3") + "";
System.out.println(k3);// 空字符串""
String k4 = map.get("k4") + "";
System.out.println(k4);// 字符串null
System.out.println(k4 == null);// false
System.out.println("null".equals(k4));// true
String k5 = map.get("k5") + "";
System.out.println(k5);// 字符串null
System.out.println(k5 == null);// false
System.out.println("null".equals(k5));// true
弊端:null对象会被转换成字符串"null"
非空判断:
if (!"".equals(v) && !"null".equals(v) ) {// 非空
}
为空判断:
if ("".equals(v) || "null".equals(v) ) {// 为空
}
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/17656155.html