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