我在代码走查时,发现下面的代码。其中Line133行的StringUtils.isEmpty(levyId+"")
引起了我的注意。levyId是Long,你这样判断Long是否为null,靠谱吗?
答案是:不靠谱!
当levyId是null时,levyId+""
的值是什么? 是字符串null哟~~ 显然,StringUtils.isEmpty("null")
是false。所以,还是老老实实地用 levyId==null
来判断Long是否为null吧。
那么,为什么levyId+""
在levyId是null时的值是字符串null?
在Java中,当你对一个对象使用加号 "+" 进行字符串连接时,实际上是先调用了String#valueOf方法将对象转换为字符串。
走,带你去java.lang.String看看它的静态成员valueOf方法。可以看到,valueOf有许多重载,除了valueOf(Object)以为,其他重载都是基于int/long/char/boolean等基本类型参数的。
对于非基本类型,即引用类型对象,就要注意valueOf(Object)
了。来看看这个方法的实现。此刻,你应该知道为什么levyId+""
当levyId为null时的值是字符串null了吧!
// in java.lang.String /** * Returns the string representation of the {@code Object} argument. * * @param obj an {@code Object}. * @return if the argument is {@code null}, then a string equal to * {@code "null"}; otherwise, the value of * {@code obj.toString()} is returned. * @see java.lang.Object#toString() */ public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
下面是与ChatGPT的对话,它对这个知识点的回答并不能令我满意。anyway,我为全世界的程序员出了一把力,训练了一下AI大脑。
标签:valueOf,obj,String,Object,levyId,isEmpty,null From: https://www.cnblogs.com/buguge/p/17457777.html