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