大坑!!!String.valueOf()输出“null“【查看源码】

项目中使用String.valueOf(),结果在数据库中存入了   "null"    这个字符串!!!!!

测试如下:

溯源:String.valueOf()被重载了多次,其中包含基本数据类型,包装类,和char数组。

重载的方法,默认会选择精度更高的。比如两个重载方法入参分别是List和ArrayList,那么调用的时候,会走ArrayList。

重载的数据。

public static String valueOf(Object obj) {return   (obj == null) ? "null" : obj.toString();
}public static String valueOf(char data[])public static String valueOf(char data[], int offset, int count)public static String valueOf(boolean b)public static String valueOf(char c) public static String valueOf(int i)public static String valueOf(long l)public static String valueOf(double d)

当我们代码中写到,获取某个对象的值,这是很常见的业务场景。

Map<String, String> map = new HashMap<>();String tmp = String.valueOf(map.get("test"));// test 是一个不存在的key

但是此时key可能不存在,value也必然不存在,结果就是null

String.valueOf(),就会走Object。

源码可以看到,判断为null,就返回"null"。这样就导致数据库存了一个"null"字符串。

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

总结,以后尽量在业务之前判空。

既然String.valueOf()底层也是toString(),为什么不直接用toString()???

  • String.valueOf()还重载了基本数据类型,基本数据类型不能toString(),
  • 避免了null的情况,null调用toString(),会报错。
    • 但也正是因为不会报错,所以他返回了一个"null"字符串,这就需要我们自己判断了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/294508.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPTs 官方榜单 Top10,第一个独属于中国传统文化的胜利

GPTs 发布已经快两个月了&#xff0c;很有可能成为下一阶段的 app 形态&#xff0c;现在已经有很多人在开发、使用 GPTs&#xff0c;最近官方数据也更新了使用量最多的 GPT&#xff0c;来看下中文榜单的 Top10&#xff1a; 排名标题创建者使用量1AI 算命Jerrold Bergnaum12100…

点击筛选框动态增加 多条可输入Table列 以及通过操作数组改造数据

点击筛选框动态增加 多条可输入Table列 以及通过操作数组改造数据 <el-col :span"8" class"tab_group"><el-form-item label"动态筛选"><el-select v-model.trim"ruleForm.flowType" placeholder"请选择" …

贪心法之活动安排问题

问题: 给定n个活动&#xff0c;每个活动有一个开始时间si和结束时间fi&#xff0c;选择出最大的互不相容的活动 集合。 思路&#xff1a; 将所有活动按照结束时间从小到大排序。 选择第一个活动&#xff0c;并将其加入最终的选择集合中。 依次考虑剩余的活动&#x…

【每日一题】移除石子使总数最小

文章目录 Tag题目来源解题思路方法一&#xff1a;贪心优先队列 写在最后 Tag 【贪心优先队列】【数组】【2023-12-23】 题目来源 1962. 移除石子使总数最小 解题思路 方法一&#xff1a;贪心优先队列 思路 本题比较简单&#xff0c;思路也十分清晰。对于 k 次操作&#xf…

【C++】理解string类的核心理念(实现一个自己的string类)

目录 一、引言 二、自我实现 1.成员变量的读写 2.构造与析构 3.迭代器 4.插入字符或字符串 尾插 中间插入 5.删除字符或子字符串 6.查找字符或子串 7.获取子串 三、完整代码 四、补充 一、引言 实现自己的 string 类是学习 C 语言和面向对象编程的一个好方法。通过…

【Python必做100题】之第二十六题(小球反弹问题)

题目&#xff1a;一小球从100米高度自由落体落下&#xff0c;每次落地后反跳回原来高度的一半再落下&#xff0c;求它在第10次落地时&#xff0c;共经过多少米&#xff1f;第10次反弹多高&#xff1f; 思路&#xff1a;初始为100米&#xff0c;落下反弹为原来的一半&#xff1…

数据结构和算法-二叉排序树(定义 查找 插入 删除 时间复杂度)

文章目录 二叉排序树总览二叉排序树的定义二叉排序树的查找二叉排序树的插入二叉排序树的构造二叉排序树的删除删除的是叶子节点删除的是只有左子树或者只有右子树的节点删除的是有左子树和右子树的节点 查找效率分析查找成功查找失败 小结 二叉排序树 总览 二叉排序树的定义 …

模型推理加速系列 | 08:TensorRT-LLM助力LLM高性能推理

引言 ​ 日暮苍山远&#xff0c;天寒白屋贫。Created by DALLE 3 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&#xff1a;卖汤圆的小女孩&#xff0c;今天是冬至&#xff0c;祝福小伙伴们幸福安康吧。紧接前文&#xff1a; 万字长文细说ChatGPT的前世今生 Llam…

一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器

前言 经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的&#xff0c;今天就给大家分享一款基于MIT License协议开源、免费的.NET Core快速开发框架、支持多种前端UI、内置代码生成器、一款高效开发的利器&#xff1a;WalkingTec.Mvvm框架&#xff08;简称WTM…

论文推荐:大型语言模型能自我解释吗?

这篇论文的研究主要贡献是对LLM生成解释的优缺点进行了调查。详细介绍了两种方法&#xff0c;一种是做出预测&#xff0c;然后解释它&#xff0c;另一种是产生解释&#xff0c;然后用它来做出预测。 最近的研究发现&#xff0c;即使LLM是在特定数据上训练的&#xff0c;也不能认…

基于Spring自动注入快速实现策略模式+工厂模式优化过多的if..else

一、策略模式 1.1策略模式定义 在策略模式&#xff08;Strategy Pattern&#xff09;中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得它们可以互相…

echarts:设置折线图线条和端点的颜色

1、代码 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Echarts折线图</title> </head> <body> <div id"main" style"width: 600px;height:400px;"></div> <sc…