最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

判断非String对象是否为null,小伙竟然用StringUtils.isEmpty(obj+"")

来源:博客园


【资料图】

我在代码走查时,发现下面的代码。其中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大脑。

关键词: