字符串string類的實現(xiàn) Java中string的用法?
Java中string的用法?String a=“ABC”此時,已為String類型的變量分配了內(nèi)存地址[即堆],然后重新分配相同的變量。引用類型變量的內(nèi)存地址指向相同的內(nèi)存地址,因此重新分配時,內(nèi)存
Java中string的用法?
String a=“ABC”
此時,已為String類型的變量分配了內(nèi)存地址[即堆],然后重新分配相同的變量。引用類型變量的內(nèi)存地址指向相同的內(nèi)存地址,因此重新分配時,內(nèi)存中的值會發(fā)生變化。例如:String A=“BCD”此時,內(nèi)存中的值變成了BCD
為了比較,我們的第一反應是第一個和第二個是否相等。在java開發(fā)語言中,我們經(jīng)常用雙等號“==”來判斷兩個變量,例如3==3是真的,但是在java中用“==”來判斷字符串時,有時兩個變量是明的就像兩顆豌豆,但他的結果總是假的,所以經(jīng)常被新手開發(fā)人員迷惑。通常在展開時,我們經(jīng)常使用A.equals(b)來判斷兩個字符串是否相等。
在Java中,使用“==”通常比較兩個變量的地址,也就是說,如果兩個變量存儲在同一個內(nèi)存單元中,它們的結果將相等。對于兩個字符串string a=“1234”string B=“1234”,對于兩個變量a和B,當使用“==”和a.equals(B)時,它們的結果是相等的,因為兩個字符串a(chǎn)和B后面是兩個字符串常量,并且它們在內(nèi)存中的存儲位置相同,所以“==”和a.equals(B)的結果是相等的;
但是對于字符串a(chǎn)=new string(“1234”)字符串B=new string(“1234”),雖然a和B的結果都是“1234”,但是用“==”來判斷時,結果是不相等的,因為此時a和B是兩個對象,內(nèi)存位置不相等,所以“=”他的判斷是不相等的,此時,使用a.equals(b)得到的結果是正確的;
使用a.equals的原因是(b)結果是兩個字符串相同,因為string類重寫了equal()方法。他的比較方法是遍歷兩個字符串中的每個字符。只有當兩個字符串的每個位置的字符相同時,此方法返回的值才會相等(true)。因此,在我們的開發(fā)過程中,當遇到字符串比較時,我們使用string equals()方法進行判斷,這樣可以減少很多bug。同樣,我們不僅可以使用equal()方法進行字符串比較,還可以使用equal()方法對任意兩個對象進行比較;
閱讀以上內(nèi)容后,您知道Java字符串比較嗎?
java中的字符串比較方法?
Java中的字符串比較方法:
1)dusting1。等于(string2)
2)STR1==STR2。
Java字符串比較是==比較引用,等于比較值。但是,不同聲明方法字符串的比較結果也不同。
例如:string STR1=new string(“a”)
string STR2=new string(“a”)
STR1==STR2 output false
STR1。等于(STR2)output true
如果這樣聲明
string STR1=“a”
string STR2=“a”
STR1==STR2 output true
STR1。Equals(STR2)output true
這是因為Equals方法最初是一個被引用的字符串類,它在實現(xiàn)時重寫該方法。
第一個聲明方法是聲明兩個對象,比較時使用“==”,它引用,并輸出false。因為它們的值是相同的,所以當使用equals時,它會進行比較,并輸出true。
在第二種情況下,不是因為比較方法與第一種不同,而是因為聲明方法不同。當聲明第二個聲明方法時,會出現(xiàn)堆或堆棧共享現(xiàn)象。也就是說,如果它被聲明為class屬性,它將檢查堆棧中是否有與當前聲明具有相同結構的字符串。如果有,則直接將地址指向現(xiàn)有的內(nèi)存地址。方法中聲明的局部變量的工作方式相同,只是它是堆棧共享。