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) ) {// 为空
    
}

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2023-08-25 10:33  Marydon  阅读(5952)  评论(0编辑  收藏  举报