首页 > 其他分享 >判断非String对象是否为null,小伙竟然用StringUtils.isEmpty(obj+"")

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

时间:2023-06-05 15:14:46浏览次数:32  
标签:valueOf obj String Object levyId isEmpty null

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

相关文章

  • pymysql.err.DataError: (1366, “Incorrect string value: ‘\\xF0\\x9F\\x92
    原因是字符串中有emoji数据。原因:字符串中有emoji字符,数据库是utf8无法识别解决方法:安装emoji库pipinstallemoji处理字符串:importemojis=emoji.demojize('......
  • StringJoiner
    StringJoiner是Java8新增的一个API,它基于StringBuilder实现,用于实现对字符串之间通过分隔符拼接的场景。StringJoiner有两个构造方法,第一个构造要求依次传入分隔符、前缀和后缀。第二个构造则只要求传入分隔符即可(前缀和后缀默认为空字符串)。StringJoiner(CharSequencede......
  • java中Date类型和时间戳、Date和String互转代码
    /***10位时间戳转Date类型*@paramtimeStamp*@return*/publicstaticDatestamp2Date(StringtimeStamp){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Datedate=null;try{......
  • springboot项目rabbitmq消费者消费json格式的String,出现无限循环抛出No method found
    转:springboot项目rabbitmq消费者消费json格式的String,出现无限循环抛出Nomethodfoundforclass[B     ......
  • TypeError: 'dict_keys' object is not subscriptable
     001、python报错>>>dict1={"aa":300,"bb":500,"cc":400,"dd":700}>>>dict1{'aa':300,'bb':500,'cc':400,'dd':700}>>>dict1.keys()dict_ke......
  • AttributeError: 'dict_values' object has no attribute 'index'
     001、python报错如下:>>>dict1={"aa":700,"bb":400,"cc":300,"dd":600}>>>dict1.values().index(300)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>......
  • uobject只有可以声明无参构造函数和不写构造函数
    (一)结论:(二)测试过程:第一种:不声明任何构造函数:第二种:声明默认构造函数:第三种:声明其他构造函数:(直接报错,需要声明默认构造)(三)ue实现原理:UHT里可以解析出你是否定义了构造函数,是哪种构造函数:参数是否匹配“FObjectInitializer”:不同构造函数,对应使用不同的宏定义: 链接:ht......
  • Android strings.xml按照key修改
    strings.xml匹配替换将两个Android项目中的多语言字符串文件(strings.xml)进行比较,如果其中一个项目中包含另一个项目没有的字符,则合并到单一的输出文件,并以key在原始XML文件中更新value值。如果key匹配不准确则忽略它。具体来说:引入re,xml.etree.ElementTree和argpar......
  • UE4 Standalone Object继承树
    objclassesObject(48)GCObjectReferencer(120)TextBuffer(88)Field(56)Struct(192)ScriptStruct(208)MovieSceneKeyStructType(400)UserDefinedStruct(312)AISenseBlueprintListener(312)Class(632)......
  • How to use variable in Python String All In One
    HowtousethevariableinPythonStringAllInOne如何在Python字符串中使用变量demos(......