JAVA中equals空_Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?...(亲测)
if(id!=null&&id!=””)
代碼中經(jīng)常這樣寫,空字符串跟null 都不用equals嗎?
首先,你的
id!=""
這種寫法是錯(cuò)誤的,要寫成
!id.equals("")
。
其次,要明白
==
與
equals
的含義
==
表示兩個(gè)對象是同一個(gè)對象的引用,
==null
表示這個(gè)對象不是任何實(shí)例對象的引用,該對象為空。
equals
是String類中的方法,表示兩個(gè)字符串的內(nèi)容相同。
一直都這么寫的,同問,為啥呢?
空字符串其實(shí)是要用equals的,否則會出錯(cuò)。null是可以使用!=
下面的代碼,結(jié)果為false
String d = new String("");
System.out.println(""==d);
所以必須使用equals來判斷空字符串,如
public static boolean isEmpty(String str) {undefined
return (str == null || "".equals(str));
}
或者使用length來判斷并擴(kuò)展到任何CharSequence,如
public static boolean isEmpty(final CharSequence cs) {undefined
return cs == null || cs.length() == 0;
}
1.
equals()
方法存在于
Object
類中,所有的包裝類如
Integer
,
Long
等均對該函數(shù)進(jìn)行了重新實(shí)現(xiàn),假如你自己寫了一個(gè)類在類中使用equals()方法,該方法的效果等同于”==”,會判斷兩個(gè)類的對象引用是否相同,而在包裝類中
equals
會判斷該對象的內(nèi)容是否相等。
2.如果該判斷寫為
if(id.equals("")&&id!=null)
,會存在NullPoint的問題,假如id的值為null,你去掉調(diào)用
equals()
方法將會拋出異常。
3.
解釋一下以上程序
str1 == str2
比較的是兩者的引用是否相同,我們聲明的字符串會被存放到字符串常量池中,
str1
時(shí)會將abc放入常量池,
str3
的時(shí)候會首先檢查常量池中是否有字符串
abc
有的話就會直接引用。str2因?yàn)槭侵苯觧ew了一個(gè)新的對象,所以地址肯定與str1的不同。那為什么使用了
intern
方法之后就相同了呢
當(dāng)調(diào)用
intern
方法時(shí),如果池已經(jīng)包含一個(gè)等于此 String 對象的字符串,則返回池中的字符串,此時(shí)并不會去生成新的字符串。因?yàn)檫€是引用了常量池中的字符串所以
str2.intern() == str1
返回值還是
true
。
以上,就是這些。(●’?’●)
id==null
時(shí),表示id這個(gè)引用沒有指向任何對象,只是一個(gè)引用;Java中具體的對象才可以調(diào)用方法(這里就是
equals()
)。所以當(dāng)
id==null
時(shí)調(diào)用
equals()
是會拋出
NullPointerException
。
這代碼寫錯(cuò),沒用equals比較空串,而且對于空字符串有很多,比如tab,回車之類的都沒有check,有n多現(xiàn)成的函數(shù)可以用,比如apache commons里面的StingUtils.isBlank方法,Guava的Strings.isNullOrEmpty方法都可以判斷null和空白字符串的情況。
還是需要明白 == 與 equals 的區(qū)別, “”與 null的區(qū)別 ,
== 是比較值是否相等 或 引用類型的地址是否相等
equals 是比較引用類型地址的值 即內(nèi)容是否相等
————————————————
版權(quán)聲明:本文為CSDN博主「淡然最好」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_28730353/article/details/114787650
總結(jié)
以上是生活随笔為你收集整理的JAVA中equals空_Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?...(亲测)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eur是什么意思
- 下一篇: Java将一段逗号分割的字符串转换成一个