java函數(shù)返回字符串的方法 Java中string的用法?
Java中string的用法?對于比較,在我們的第一反應(yīng)中就是第一個(gè)與第二個(gè)是否相等,在Java開發(fā)語言中,我們經(jīng)常是使用雙等號“==”來進(jìn)行兩個(gè)變量的判斷,比如3==3為正確(true),但是在Ja
Java中string的用法?
對于比較,在我們的第一反應(yīng)中就是第一個(gè)與第二個(gè)是否相等,在Java開發(fā)語言中,我們經(jīng)常是使用雙等號“==”來進(jìn)行兩個(gè)變量的判斷,比如3==3為正確(true),但是在Java中使用“==”進(jìn)行字符串判斷的時(shí)候,有時(shí)候兩個(gè)變量明明都是一模一樣的,但是他的結(jié)果卻一直是不相等(false),所以對于新手開發(fā)者來說,經(jīng)常會(huì)感到迷惑。通常在我們開發(fā)的時(shí)候,經(jīng)常使用的比較方法為a.equals(b)來進(jìn)行判斷兩個(gè)字符串是否相等。
在Java中,使用“==”一般比較的是兩個(gè)變量的地址,也就是說這兩個(gè)變量是在同一個(gè)內(nèi)存單元存儲,他們的結(jié)果才會(huì)相等,對于兩個(gè)字符串String a = "1234" String b = "1234"對于這兩個(gè)變量a和b,當(dāng)時(shí)用“==”和使用a.equals(b)的時(shí)候,他們的結(jié)果都是相等的,因?yàn)閍和b兩個(gè)字符串后是兩個(gè)字符串常量,他們在內(nèi)存中的存儲是在同一個(gè)地方,所以使用“==”和a.equals(b)兩個(gè)結(jié)果都是相等的;
但是對于String a = new String("1234) String b = new String("1234")雖然a和b的結(jié)果都是“1234”,但是使用“==”進(jìn)行判斷的時(shí)候,得到的結(jié)果卻是不相等的,因?yàn)榇藭r(shí)的a和b是兩個(gè)對象,他們所存在的內(nèi)存位置不相等,所以“==”他的判斷也就是不相等的了,此時(shí)使用a.equals(b)得到的結(jié)果就是正確的;
之所以使用a.equals(b)的結(jié)果是判斷出兩個(gè)字符串一樣,是因?yàn)镾tring類重寫了equal()的方法,他的比較方法是循環(huán)遍歷兩個(gè)字符串中的每個(gè)字符,只有當(dāng)兩個(gè)字符串中每個(gè)位置上的字符都一樣的時(shí)候,這個(gè)方法返回的值才會(huì)是相等(true)
因此在我們開發(fā)過程中,遇到字符串的比較,使用字符串的equals()的方法進(jìn)行判斷,這樣會(huì)減少很多的bug同樣不僅僅對于字符串的比較,對于任何兩個(gè)對象的比較,我們都可以使用equal()方法;
看完上面的內(nèi)容,你了解Java字符串比較了嗎?
為什么說java里面只有值傳遞?
關(guān)于這個(gè)問題,不同人對它的理解不盡相同。對初學(xué)Java的同學(xué)來說,可能簡單的認(rèn)為Java中參數(shù)傳遞就是分為值傳遞和引用傳遞,至于為什么,因?yàn)檎n本上就是這么說的。對于有些工作年限的程序員來說,可能認(rèn)為如果傳遞的參數(shù)類型是普通類型,那么就是值傳遞,如果參數(shù)是對象,那么就是引用傳遞。還有一些人認(rèn)為Java中只有值傳遞,就是題主問題中的主題。
對Java編程語言來說,前兩種理解是錯(cuò)誤的,Java中只有值傳遞。對于我來說,剛開始也是理解有值傳遞和引用傳遞一說的,但是隨著自己寫代碼的積累,慢慢發(fā)現(xiàn)并不是那么回事。那為什么只有值傳遞呢?
首先,來了解一下什么是值傳遞,什么是引用傳遞?
值傳遞是說在調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)值復(fù)制一份傳遞到被調(diào)用函數(shù)中,在被調(diào)函數(shù)中修改參數(shù)值不會(huì)影響原實(shí)參值。
引用傳遞是說在調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)的地址直接傳遞到被調(diào)用的函數(shù)中,在被調(diào)函數(shù)中修改參數(shù)值會(huì)影響原實(shí)參值。
如果傳遞的參數(shù)類型是普通基本類型,那么一定是復(fù)制一份實(shí)參值傳遞給形參的,但是當(dāng)參數(shù)類型是對象的時(shí)候,也是復(fù)制的一份參數(shù)值傳遞給形參,只不過復(fù)制的是對象引用的地址,也就是在內(nèi)存中分配的存儲地址,不是直接傳遞的引用地址。
此時(shí),可能有人會(huì)說那為什么將一個(gè)對象傳到另一個(gè)方法中,在這個(gè)方法中修改了這個(gè)對象的屬性值時(shí),原調(diào)用方法中的對象屬性值也跟著變了,它不就是引用傳遞嗎?
其實(shí),這是一個(gè)很容易迷惑的點(diǎn)。你仔細(xì)看看上面的陳述就會(huì)發(fā)現(xiàn),不是這么回事。將一個(gè)對象傳到另一個(gè)方法中,傳遞的是什么?傳遞的是對象引用的地址,這個(gè)對象引用的地址在另一個(gè)方法中被修改了嗎?原對象引用有受影響嗎?并沒有吧!
所以,Java中并沒有引用傳遞,只有值傳遞,不要再搞錯(cuò)了!