String
1. Java中String判斷相等時equals與==的區(qū)別
- equals :兩個字符串對象所存放的內(nèi)容相同,不需要存放的內(nèi)存地址相同
- == :當(dāng)判斷的兩個變量所使用的內(nèi)存地址為相同時才返回true
- 當(dāng)我們使用字符串連接--連接方式一般為+或concat("substring")--的方式創(chuàng)建字符串時,都會構(gòu)建一個新的String對象,即在內(nèi)存中開辟一個新的地址來存放,所以這個時候即使內(nèi)容相同,用==判斷的話,也是返回false;而使用等號賦值時,若內(nèi)存中有該字符串,則該變量指向此內(nèi)存地址,不是重新創(chuàng)建一個,所以此時用==時會返回true。
Java中String判斷相等equals與==的區(qū)別以及StringBuilder的equals
2. Java 中 String、StringBuffer、StringBuilder 的區(qū)別
- 運(yùn)行速度:StringBuilder > StringBuffer > String
String最慢的原因:
String為字符串常量,創(chuàng)建后不可更改,而StringBuilder和StringBuffer均為字符串變量。在大量的string拼接操作出現(xiàn)的時候,JVM由于內(nèi)存緊張,基本實時進(jìn)行GC,引起速度變慢; - 線程安全:StringBuilder是線程不安全的,而StringBuffer是線程安全的
原因:StringBuffer中很多方法可以帶有synchronized關(guān)鍵字 - 總結(jié):String:適用于少量字符串操作的情況
StringBuilder:適用于單線程下在字符緩沖區(qū)進(jìn)行大量操作的情況
StringBuffer:適用多線程下在字符緩沖區(qū)進(jìn)行大量操作的情況
Java中的String,StringBuilder,StringBuffer三者的區(qū)別
3. 常用方法
- toCharArray() :將字符串轉(zhuǎn)換為字符數(shù)組
- 替換字符串中特定位置的字符:
法1:
String myName = "domanokz";
String newName = myName.substring(0,4)+'x'+myName.substring(5);
法2:
StringBuilder myName = new StringBuilder("domanokz");
myName.setCharAt(4, 'x');
System.out.println(myName);
4. HashSet和HashMap的區(qū)別
HashMap | HashSet |
---|---|
HashMap實現(xiàn)了Map接口 | HashSet實現(xiàn)了Set接口 |
HashMap儲存鍵值對 | HashSet僅僅存儲對象 |
使用put()方法將元素放入map中 | 使用add()方法將元素放入set中 |
HashMap中使用鍵對象來計算hashcode值 | HashSet使用成員對象來計算hashcode值,對于兩個對象來說hashcode可能相同,所以equals()方法用來判斷對象的相等性,如果兩個對象不同的話,那么返回false |
HashMap比較快,因為是使用唯一的鍵來獲取對象 | HashSet較HashMap來說比較慢 |