Java字符串的处理到底是强转还是toString()? kaki踩坑日记

        近期kaki的项目出现一个生产问题,发现有个值不生效,是0,从上游报文看实际是有具体的值的,报文大概这样:

   第一种 {"score":200,"name":"张三"}

   第二种 {"score":"200","name":"张三"}

         经过测试排查发现,落表后第二种报文的score有值,第一张是0。梳理程序发现今年6月份改过一段代码

         这里写伪代码

        改之前:

          String str =  第一种 或者 第二种

          JSONObject job = JSONObject.parseObject(str);

          String scoreStr = job.get("score").toString()

          由于当时的生产报文会出现“第三种 {"name":"张三"})”的情况,生产的日志经常报警说“xxx为null,控制指针异常”,故我们做了一次优化

        改造后:

          String str =  第一种 或者 第二种

          JSONObject job = JSONObject.parseObject(str);

          String scoreStr = (String) job.get("score")

  此种方法的好处是,当get一个不存在的值时,不会出现null.toString()的情况,但改了之后发现“第一种”报文无法正常获取了会出现

        String scoreStr = (String) 200;  -- cannot cast int to String 的问题,导致异常分支直接将值设置成0

        但基本数据类型也是不支持:

         String scoreStr = 200.toString()      -- 不能够使用引用字符串的方法

        经过分析原来的代码发现,JSONObject.parseObject(str) 这步会将基础数据类型转出Integer类型,Integer是只支持200.toString()的,所以6月之前的代码没问题,6月后的2个月数据量小没有发现问题,9月为季度尾数据量大才发现问题。 

       总上所述,大家还是要具体评估使用toString(),还是强转,不要盲目认为强转一定比toString()安全。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KakiNakajima

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值