网站首页 > java教程 正文
开发中,小伙伴一定经常遇到将一个Object类型的字段转换为String类型的字段。比如我们从一个类型定义为Map<String, Object>的集合中获取value值,将其设置到一个对应值为String类型的对象中返回前端,那这个时候就要把取出来的object值转换为String了。
Object转换为String的方式有如下几种:
- (String)object
- object.toString()
- Stirng.valueOf(object)
- ""+object
我们暂且先不讨论哪种好,哪种不好,我们先认真考虑下从map中get出来的value值存在几种情况。
如果这个map是上游系统给我们的,秉持不相信上游系统的原则,那么某一个key为type对应的value值可能存在如下几种情况:
- value为字符串,符合传递要求
- value为其他类型,比如为Integer类型
- value为空字符串
- value为空格
- value没传值,默认为null
- map中不包含这个key
针对这些情况,接下来我们具体分析Object转换为String的方式。
(String)object
(String)object是将Object类型的对象强制转换为String类型。
对于空格、空字符串、null都可以转换,但是Object对象的值类型不是字符串比如Integer类型时,会存在类型转换异常错误。
public static void main(String[] args) {
/**
* 为了兼容各种参数,map的value值定义为了Object类型
* 针对一个key为type的值,它的value存在以下几种情况:
* 1)value为字符串
* 2)value为空字符串
* 3)value为空格
* 4)value没传值,默认为null
* 5)map中不包含这个key
*/
Map<String, Object> mapParams = new HashMap<String, Object>();
TypeEntity entity = new TypeEntity();
/**
* 强制类型转换
*/
mapParams.put("type",1);
System.out.println("使用强制类型转换的结果为:" + (String) mapParams.get("type")) ;
}
运行结果为:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at com.alipay.demo.StringTest.main(StringTest.java:30)
总结:
强制类型转换这种方式如果上游系统不是自己团队的尽量不要使用,很容易因为数据类型不一致转换报错。
object.toString()
object.toString()对空格、空字符串、其他数据类型都可以进行转换。需要注意,值为null时的空指针异常。
/**
* toString()
*/
mapParams.put("type", null);
System.out.println("toString()转换的结果为:" + mapParams.get("type").toString());
运行结果为:
Exception in thread "main" java.lang.NullPointerException
at com.alipay.demo.StringTest.main(StringTest.java:39)
总结:
我们在使用object.toString()需要对获取的value值先进行null的判断再转换。值为null的场景有两种情况:key对应的value值为null或者map中不存在这个key值。
Stirng.valueOf(object)
Stirng.valueOf(object)可以对null、空格、空字符串、其他数据类型进行转换,是一个比较安全的转换方法。
需要注意的是当值为null的时候该方法会转换为"null",这个值会影响业务后续的非空判断。
我们查看Stirng.valueOf()方法的源码:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
valueOf()方法本质是使用的obj.toString(),对于可能存在的空指针异常进行了判断规避。
但是转换的"null"可能会对我们的业务进行干扰,在使用这个方法的时候需要先判断结果是否为null再进行转换,当然如果没有业务允许也可以不进行判断。
/**
* Stirng.valueOf(object)
*/
mapParams.put("type", null);
System.out.println("Stirng.valueOf(object)转换的结果为:" + String.valueOf(mapParams.get("type")));
System.out.println(String.valueOf(mapParams.get("type")) == null);
System.out.println("null".equals(String.valueOf(mapParams.get("type"))));
运行结果为:
Stirng.valueOf(object)转换的结果为:null
false
true
总结:
Stirng.valueOf(object)是比较安全的转换方式,但是需要特别注意当值为null的时候转换为"null",避免对业务进行干扰,在使用的时候最好是加上判断。
""+object
""+object此方法是利用字符串的拼接特点将其他类型的数据转换为字符串,它和Stirng.valueOf(object)类似不用考虑空格、空字符串、null、和其他数据类型,但是需要注意当值为null的时候会转换为"null"。
/**
* ""+object
*/
mapParams.put("type", null);
System.out.println(""+mapParams.get("type"));
System.out.println((""+mapParams.get("type")) == null);
System.out.println("null".equals((""+mapParams.get("type"))));
运行结果为:
null
false
true
今天就到这里了!
我是勾勾,愿您认真工作,快乐生活,开心每一天!
我们下篇文章见!
- 上一篇: java数据类型的转换以及精度丢失
- 下一篇: Java基础回顾(三)——变量
猜你喜欢
- 2024-11-21 Java整数和浮点数类型转换
- 2024-11-21 JavaSE基础之多态的应用场景
- 2024-11-21 第二章:Java数据类型和运算符
- 2024-11-21 int强转为byte类型么?会产生什么问题?
- 2024-11-21 Java接口&异常处理&类型转换
- 2024-11-21 详解 Java 17 中的模式匹配(Pattern Matching)
- 2024-11-21 Java基本数据类型之间的转换规则
- 2024-11-21 关于Java String 类型转换时null的问题
- 2024-11-21 [JAVA冷知识]什么是逆变与协变?数组是否支持协变&逆变?泛型呢?
- 2024-11-21 看完后让你成为武松,手把手教你打死Java中的纸老虎
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)