1. 程式人生 > >java字串判等及StringBuffer/StringBuilder的常用方法

java字串判等及StringBuffer/StringBuilder的常用方法

字串判等

在這裡插入圖片描述
1.String str1 = “Hello”,str2 = “Hello”;
System.out.println(str1==str2);//ture

2.String str1 = new String(“Hello”),str2 = new String(“Hello”);
System.out.println(str1==str2);//false

3.String str1 = new String(“Hello”).intern();
String str2 = “Hello”;
System.out.println(str1==str2);//ture

在java堆中有一塊叫常量池的區域,不用字串new生成的時候會直接放在這裡。而new的時候先會在常量池中存放,再新開闢一塊區域。
“==”對基本型別比較是直接比較值,而對引用型別則會比較地址。1中比較的是常量池中地址,2中則比較新開闢的地址
3中str1呼叫intern()函式指向的是常量池的地址故結果相等。

4.String str1 = new String(“hello”);
String str2 = “hello”;
str1.intern();
System.out.println(str1==str2);//false
intern的時候會先尋找是否存在引用指向該常量,如果不存在才會將該引用指向常量。所以4中的intern就是一句廢話。intern的目的節約記憶體空間

5.String str = “helloworld”;
String str1 = “hello”+“world”;
System.out.println(str1==str2);//ture

6.String str = “helloworld”;
String str1 = “hello”;
String str2 = str1+“world”;
System.out.println(str==str2);//false
//6中先new 一個StringBudder給StringBudder物件append(“hello”)
在append(“world”)最後在toString()被str2接收。

StringBuilder&StringBuffer

在這裡插入圖片描述
long begin = System.currentTimeMillis();
//do some thing…
long end = System.currentTimeMillis();
System.out.println(end-begin);

從底層來看二者的實現是差不多的,時間測試來說StringBuilder更快,但是StringBuffer中包含關鍵字synchronized會使執行緒執行同步,故支援高併發。

String常見方法

charAt(int index)//得到元素
indexOf(String str)//得到下標(第一個)
contains(CharSquence c)//得到布林值
spilt(String regex)//分成字串陣列
replaceAll(String regex,String replacement)//把正則表示式換成目標字串
replace(char oldchar, char newchar)//更換字串中的陣列/字元
cancat(String str)//連線並返回該陣列副本
tirm()//刪除兩端空格轉行製表等符號
codePointCount(int beginIndex, int endIndex)//求長度但不同於length()該方法求的是Unicode的長度(側面印證java支援更多語言通用性好)

stringBuffer與StringBuilder
append(Object obj)//給字串後新增~返回並String