Java 字符串比较,String 中的一些方法 == 和 equals 的详解
"==" 是比較的是兩個(gè)對(duì)象的內(nèi)存地址,而equals方法默認(rèn)情況下是比較兩個(gè)對(duì)象的內(nèi)存地址.
1.String str = "hello" ?生成的字符串,首先是去檢查字符串常量池中是否已經(jīng)存在了這個(gè)"hello" ,若存在,就不會(huì)再創(chuàng)建一個(gè)新的"hello",直接返回常量池中的這個(gè)字符串地址,若不存在,那么就在字符串常量池中加入這個(gè)字符串.字符串常量池,存在于方法區(qū)中.
2.String str = ?new String("hello"),首先是在常量池中尋找是否存在這個(gè)字符串,存在則不再建立,若不存在,則建立,之后復(fù)制一份到堆內(nèi)存中!在堆內(nèi)存中new一個(gè)字符串,當(dāng)然如果再new一個(gè)字符串,那么他們的內(nèi)存地址是不同的.但是對(duì)于new出來(lái)的字符串,利用equals的時(shí)候,他們是相同的,原因是String 中重寫(xiě)equals的方法中,是利用字符串轉(zhuǎn)為char 數(shù)組來(lái)對(duì)每一個(gè)char進(jìn)行比較,最后得出去true 或者 false. ? ? new String 一共創(chuàng)建兩次這個(gè)對(duì)象.一個(gè)在常量池,一個(gè)在堆內(nèi)存中!
3.字符串比較技巧:
利用"中國(guó)".equals(str) ,用常量equals,防止發(fā)生空指針異常.方法調(diào)用不為空......變量調(diào)用方法的時(shí)候不能為NULL,不然會(huì)出現(xiàn)空指針異常!
4.字節(jié)數(shù)組,字符數(shù)組 與 String 的轉(zhuǎn)換
?str.getBytes() ,?str.toCharArray()? ? 轉(zhuǎn)換為字節(jié)數(shù)組和字符數(shù)組
5.split("-") 分隔符獲取字符串內(nèi)容
6.subString (startindex , endindex) ? ?一般都是包頭不包尾,所以需要endindex加一,這樣才切割完整
7.StringBuffer 問(wèn)題: 默認(rèn)的構(gòu)造方法是16字符,如果添加超過(guò)了16字符,那就自動(dòng)增長(zhǎng)一倍. ?已經(jīng)被StringBuilder代替
String 是一開(kāi)始就建立的是常量,所以不建議經(jīng)常修改!如果需要頻繁修改字符串內(nèi)容,建議使用字符串緩沖類.是用來(lái)存儲(chǔ)String的容器,增刪查改非常方便.
利用append 方法添加.
sb.reverse() ? 調(diào)換
8.StringBuffer 是線程安全的 (操作效率不高), ?StringBuilder (操作效率高) 非線程安全,但比前快.
推薦使用 StringBuilder ? 因?yàn)椴僮餍矢?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/bequt/p/5644950.html
總結(jié)
以上是生活随笔為你收集整理的Java 字符串比较,String 中的一些方法 == 和 equals 的详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 合并果子_tyvj1066_vijos1
- 下一篇: 编写高质量代码:改善Java程序的151