一篇带给你Object转String

开发 前端
开发中,小伙伴一定经常遇到将一个Object类型的字段转换为String类型的字段。本篇就给大家介绍相关知识。

[[398019]]

 开发中,小伙伴一定经常遇到将一个Object类型的字段转换为String类型的字段。比如我们从一个类型定义为Map<String, Object>

Object转换为String的方式有如下几种:

  • (String)object
  • object.toString()
  • Stirng.valueOf(object)
  • ""+object

我们暂且先不讨论哪种好,哪种不好,我们先认真考虑下从map中get出来的value值存在几种情况。

如果这个map是上游系统给我们的,秉持不相信上游系统的原则,那么某一个key为type对应的value值可能存在如下几种情况:

  1. value为字符串,符合传递要求
  2. value为其他类型,比如为Integer类型
  3. value为空字符串
  4. value为空格
  5. value没传值,默认为null
  6. map中不包含这个key

针对这些情况,接下来我们具体分析Object转换为String的方式。

(String)object

(String)object是将Object类型的对象强制转换为String类型。

对于空格、空字符串、null都可以转换,但是Object对象的值类型不是字符串比如Integer类型时,会存在类型转换异常错误。

  1. public static void main(String[] args) { 
  2.        /** 
  3.         * 为了兼容各种参数,map的value值定义为了Object类型 
  4.         * 针对一个key为type的值,它的value存在以下几种情况: 
  5.         * 1)value为字符串 
  6.         * 2)value为空字符串 
  7.         * 3)value为空格 
  8.         * 4)value没传值,默认为null 
  9.         * 5)map中不包含这个key 
  10.         */ 
  11.        Map<String, Object> mapParams = new HashMap<String, Object>(); 
  12.        TypeEntity entity = new TypeEntity(); 
  13.        /** 
  14.         * 强制类型转换 
  15.         */ 
  16.        mapParams.put("type",1); 
  17.        System.out.println("使用强制类型转换的结果为:" + (String) mapParams.get("type")) ; 

 运行结果为:

  1. Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 
  2.     at com.alipay.demo.StringTest.main(StringTest.java:30) 

 总结:

强制类型转换这种方式如果上游系统不是自己团队的尽量不要使用,很容易因为数据类型不一致转换报错。

object.toString()

object.toString()对空格、空字符串、其他数据类型都可以进行转换。需要注意,值为null时的空指针异常。

  1.  /** 
  2.  * toString() 
  3.  */ 
  4. mapParams.put("type"null); 
  5. System.out.println("toString()转换的结果为:" + mapParams.get("type").toString()); 

 运行结果为:

  1. Exception in thread "main" java.lang.NullPointerException 
  2.     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()方法的源码:

  1. public static String valueOf(Object obj) { 
  2.        return (obj == null) ? "null" : obj.toString(); 
  3.    } 

 valueOf()方法本质是使用的obj.toString(),对于可能存在的空指针异常进行了判断规避。

但是转换的"null"可能会对我们的业务进行干扰,在使用这个方法的时候需要先判断结果是否为null再进行转换,当然如果没有业务允许也可以不进行判断。

  1.  /** 
  2.  * Stirng.valueOf(object) 
  3.  */ 
  4. mapParams.put("type"null); 
  5. System.out.println("Stirng.valueOf(object)转换的结果为:" + String.valueOf(mapParams.get("type"))); 
  6. System.out.println(String.valueOf(mapParams.get("type")) == null); 
  7. System.out.println("null".equals(String.valueOf(mapParams.get("type")))); 

 运行结果为:

  1. Stirng.valueOf(object)转换的结果为:null 
  2. false 
  3. true 

 总结:

Stirng.valueOf(object)是比较安全的转换方式,但是需要特别注意当值为null的时候转换为"null",避免对业务进行干扰,在使用的时候最好是加上判断。

""+object

""+object此方法是利用字符串的拼接特点将其他类型的数据转换为字符串,它和Stirng.valueOf(object)类似不用考虑空格、空字符串、null、和其他数据类型,但是需要注意当值为null的时候会转换为"null"。

  1.  /** 
  2.  * ""+object 
  3.  */ 
  4. mapParams.put("type"null); 
  5. System.out.println(""+mapParams.get("type")); 
  6. System.out.println((""+mapParams.get("type")) == null); 
  7. System.out.println("null".equals((""+mapParams.get("type")))); 

 运行结果为:

  1. null 
  2. false 
  3. true 

 今天就到这里了!

我是勾勾,愿您认真工作,快乐生活,开心每一天!

 

责任编辑:姜华 来源: 今日头条
相关推荐

2021-07-12 06:11:14

SkyWalking 仪表板UI篇

2023-03-29 07:45:58

VS编辑区编程工具

2021-01-28 08:55:48

Elasticsear数据库数据存储

2021-04-08 11:00:56

CountDownLaJava进阶开发

2021-04-14 14:16:58

HttpHttp协议网络协议

2021-03-12 09:21:31

MySQL数据库逻辑架构

2021-07-21 09:48:20

etcd-wal模块解析数据库

2021-06-21 14:36:46

Vite 前端工程化工具

2022-04-29 14:38:49

class文件结构分析

2024-06-13 08:34:48

2022-02-17 08:53:38

ElasticSea集群部署

2022-03-22 09:09:17

HookReact前端

2021-04-01 10:51:55

MySQL锁机制数据库

2021-07-08 07:30:13

Webpack 前端Tree shakin

2023-03-13 09:31:04

2021-10-28 08:51:53

GPIO软件框架 Linux

2021-04-14 07:55:45

Swift 协议Protocol

2022-02-25 15:50:05

OpenHarmonToggle组件鸿蒙

2021-04-23 08:59:35

ClickHouse集群搭建数据库

2022-03-01 13:55:27

TektonKubernetes集群
点赞
收藏

51CTO技术栈公众号