一、Java中字符串的不變性
String對(duì)象創(chuàng)建后則不能修改,是不可變得,所謂的修改其實(shí)是創(chuàng)建了新的對(duì)象,所指向的內(nèi)存空間不同。如圖所示:

運(yùn)行結(jié)果:

總結(jié):
1.通過(guò)String? s1="愛(ài)慕課",聲明了一個(gè)字符串對(duì)象,s1存放了到字符串的引用,在內(nèi)存中的存放引用關(guān)系如圖所示:

然后通過(guò)s1="歡迎來(lái)到:"+s1;改變了字符串s1,其實(shí)質(zhì)是創(chuàng)建了一個(gè)新的字符串對(duì)象,變量s1指向了新創(chuàng)建的字符串對(duì)象,如下圖所示:

2.一旦一個(gè)字符串在內(nèi)存中創(chuàng)建,則這個(gè)字符串將不可改變。如果需要一個(gè)可以改變的字符串,我們可以通過(guò)使用StringBuffer或者StringBuilder.
3.每次new一個(gè)字符串就是產(chǎn)生一個(gè)新的對(duì)象,即使兩個(gè)字符串的內(nèi)容相同,使用"=="比較時(shí)也為"false",如果需要比較內(nèi)容是否相容,應(yīng)使用"equals()"方法。
二、Java中String類的常用方法
String類的常用方法:

結(jié)合代碼熟悉下方法的使用:

運(yùn)行結(jié)果:

注意:
1.字符串str中的字符的索引從0開(kāi)始,范圍為0到str.length()-1;
2.使用indexOf進(jìn)行字符串或字符串的查找時(shí),如果匹配返回位置索引;如果沒(méi)有匹配結(jié)果,返回-1;
3.使用substring(beginIndex,endIndex)進(jìn)行字符串截取時(shí),包括beginIndex位置的字符,不包括endIndex位置的字符。
實(shí)例二:

運(yùn)行結(jié)果:

注意:
"=="和equals()有什么區(qū)別呢:
==:判斷兩個(gè)字符串在內(nèi)存中的首地址是否相同,即是否是同一個(gè)字符串對(duì)象
equals:比較存儲(chǔ)在兩個(gè)字符串對(duì)象中的內(nèi)容是否一致
三、Java中的String Builder類的常用方法

例如:在下面的實(shí)例代碼中,創(chuàng)建了String Builder對(duì)象,用來(lái)存儲(chǔ)字符串,并對(duì)其進(jìn)行追加和插入操作,這些操作修改了str對(duì)象的值,而沒(méi)有創(chuàng)建新的對(duì)象,這就是String Builder和String的最大的區(qū)別

運(yùn)行結(jié)果:
