JAVA中equals空_Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?...(亲测)

169 篇文章 6 订阅

if(id!=null&&id!=””)

代码中经常这样写,空字符串跟null 都不用equals吗?

首先,你的

id!=""

这种写法是错误的,要写成

!id.equals("")

其次,要明白

==

equals

的含义

==

表示两个对象是同一个对象的引用,

==null

表示这个对象不是任何实例对象的引用,该对象为空。

equals

是String类中的方法,表示两个字符串的内容相同。

一直都这么写的,同问,为啥呢?

空字符串其实是要用equals的,否则会出错。null是可以使用!=

下面的代码,结果为false

String d = new String("");

System.out.println(""==d);

所以必须使用equals来判断空字符串,如

public static boolean isEmpty(String str) {undefined

return (str == null || "".equals(str));

}

或者使用length来判断并扩展到任何CharSequence,如

public static boolean isEmpty(final CharSequence cs) {undefined

return cs == null || cs.length() == 0;

}

1.

equals()

方法存在于

Object

类中,所有的包装类如

Integer

Long

等均对该函数进行了重新实现,假如你自己写了一个类在类中使用equals()方法,该方法的效果等同于”==”,会判断两个类的对象引用是否相同,而在包装类中

equals

会判断该对象的内容是否相等。

2.如果该判断写为

if(id.equals("")&&id!=null)

,会存在NullPoint的问题,假如id的值为null,你去掉调用

equals()

方法将会抛出异常。

3.

解释一下以上程序

str1 == str2

比较的是两者的引用是否相同,我们声明的字符串会被存放到字符串常量池中,

str1

时会将abc放入常量池,

str3

的时候会首先检查常量池中是否有字符串

abc

有的话就会直接引用。str2因为是直接new了一个新的对象,所以地址肯定与str1的不同。那为什么使用了

intern

方法之后就相同了呢

当调用

intern

方法时,如果池已经包含一个等于此 String 对象的字符串,则返回池中的字符串,此时并不会去生成新的字符串。因为还是引用了常量池中的字符串所以

str2.intern() == str1

返回值还是

true

以上,就是这些。(●’◡’●)

id==null

时,表示id这个引用没有指向任何对象,只是一个引用;Java中具体的对象才可以调用方法(这里就是

equals()

)。所以当

id==null

时调用

equals()

是会抛出

NullPointerException

这代码写错,没用equals比较空串,而且对于空字符串有很多,比如tab,回车之类的都没有check,有n多现成的函数可以用,比如apache commons里面的StingUtils.isBlank方法,Guava的Strings.isNullOrEmpty方法都可以判断null和空白字符串的情况。

还是需要明白 == 与 equals 的区别, “”与 null的区别 ,

== 是比较值是否相等 或 引用类型的地址是否相等

equals 是比较引用类型地址的值 即内容是否相等
————————————————
版权声明:本文为CSDN博主「淡然最好」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_28730353/article/details/114787650

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值