String類的基本特點(diǎn)

一. String類的兩種實(shí)例化方式

1. String可以采用直接賦值的形式進(jìn)行操作眯搭,這一點(diǎn)像基本數(shù)據(jù)類型的賦值操作一樣。

范例:String str = "hello"各薇; ? ? // 這里的string僅僅增加了一個(gè)雙引號(hào)而已

2. String既然是一個(gè)類项贺,那么必然存在構(gòu)造方法。

構(gòu)造:Public String(String str); ? // 前一個(gè)String為類名稱峭判,后一個(gè)String為參數(shù)類型

范例:String str = new String("hello")开缎;

二. 字符串比較

1. 使用“==”比較字符串

? ? String str1 = "hello" ;

? ? String str2 = new String("hello")林螃;

? ? System.out.println(str1 == str2) ;

輸出:false

分析:因?yàn)閟tr1和str2保存在棧內(nèi)存中啥箭,分別存放了兩個(gè)對(duì)象所保存的內(nèi)存地址的數(shù)值,因此不相等治宣。這種比較屬于地址數(shù)值比較,并沒(méi)有比較對(duì)象的內(nèi)容砌滞。

2. 進(jìn)行字符串對(duì)象內(nèi)容比較

用String類提供的方法來(lái)實(shí)現(xiàn)內(nèi)容比較侮邀,方法:Public boolean equals(String str)

? ? String str1 = "hello" ;

? ? String str2 = new String("hello")贝润;

? ? System.out.println(str1.equals(str2)) ;

輸出:true

三. 字符串為匿名對(duì)象

在任何語(yǔ)音的底層上面都不會(huì)提供直接的字符串類型绊茧,所謂的字符串只是高級(jí)語(yǔ)言提供給用戶方便開(kāi)發(fā)的支持而已,它本身存的并不是字符串打掘。所有語(yǔ)言對(duì)于字符串的底層實(shí)現(xiàn)都是字符數(shù)組华畏,數(shù)組的最大缺陷就是長(zhǎng)度固定。

在Java里面本身并沒(méi)有提供字符串常量的概念尊蚁,所有使用“""”定義的內(nèi)容本質(zhì)上來(lái)講都是String的匿名對(duì)象亡笑。

范例:

? ? String str = "hello" ;

? ? System.out.println("hello".equals(str)) ; ? ? ?// 能夠調(diào)用equals方法横朋,說(shuō)明"hello"是一個(gè)對(duì)象

提醒:在日后的開(kāi)發(fā)過(guò)程中仑乌,如果要判斷用戶輸入的字符串是否等同于指定的字符串,那么一定要將指定的字符串寫在前面琴锭。(避免用戶沒(méi)有輸入的情況下晰甚,input為null,導(dǎo)致出現(xiàn)異常NullPointerException)

范例:

? ? String input = null 决帖;// 用戶沒(méi)有輸入的話

? ? System.out.println(str1.equals("hello")) ;? // 如果將"hello"寫在前面厕九,即使用戶不輸入,也只 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 是會(huì)出現(xiàn)一個(gè)false而已地回。這個(gè)跟if語(yǔ)句里的"==

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 一個(gè)道理扁远,數(shù)值寫前面俊鱼,避免少些一個(gè)"="

四. String兩種實(shí)例化的區(qū)別

1. “""”雙引號(hào)形式

? ? String str1 = "hello" ;

? ? String str2 = "hello" 穿香;

? ? System.out.println(str1 == str2) ;

? ? System.out.println("hello" == str2) ;

? ? System.out.println("hello" == "hello") ;

輸出:都為true ? (該結(jié)果一方面與共享設(shè)計(jì)有關(guān)亭引,另一方面由于JDK版本不同可能存在若干差異,低版本可能出現(xiàn)為false的情況)

String類的設(shè)計(jì)使用了一個(gè)共享設(shè)計(jì)模式皮获。

? ? ? ? 在JVM的底層實(shí)際上會(huì)自動(dòng)維護(hù)一個(gè)對(duì)象池(字符串對(duì)象池)焙蚓,如果現(xiàn)在采用了直接賦值的模式進(jìn)行String類對(duì)象的實(shí)例化操作,那么該實(shí)例化對(duì)象(字符串)將自動(dòng)的保存到這個(gè)對(duì)象池之中洒宝。如果下次繼續(xù)有人使用了直接賦值的模式聲明了String類的對(duì)象购公,那么如果此時(shí)對(duì)象池之中有指定的內(nèi)容,將進(jìn)行直接引用雁歌,如果沒(méi)有宏浩,則開(kāi)辟新的字符串對(duì)象,而后將其保存在對(duì)象池之中以供下次使用(所謂的對(duì)象池就是一個(gè)對(duì)象數(shù)組)靠瞎。

2. 采用構(gòu)造方法

? ? String str = new String("hello")比庄;

采用構(gòu)造方法的形式會(huì)開(kāi)辟兩塊堆內(nèi)存空間,其中一塊堆內(nèi)存空間將成為垃圾乏盐,除了這一缺點(diǎn)之外佳窑,實(shí)際上也會(huì)對(duì)字符串共享產(chǎn)生影響。

范例:

? ? String str1 = new String("hello")父能;

? ? String str2 = "hello"神凑;

? ? System.out.println(str1 == str2) ;

輸出:false

此時(shí),String str1 = new String("hello")中的str1指向的堆內(nèi)存并未保存到對(duì)象池之中何吝,可以使用String類中的方法:public String intern()溉委,手工進(jìn)行入池操作。這個(gè)方法剛好返回的也是一個(gè)String類型爱榕,所以能夠?qū)崿F(xiàn)入池的操作瓣喊。

范例:

? ? String str1 = new String("hello").intern();

? ? String str2 = "hello"呆细;

? ? System.out.println(str1 == str2) ;

輸出:true

五. 字符串一旦定義不可改變

? ?String str = "hello"型宝;

? ?str = str + "world" ;

? ?str += "!!!" ;


分析:字符串修改產(chǎn)生了大量的垃圾,所以開(kāi)發(fā)時(shí)應(yīng)避免大量使用絮爷。如下例所示:

String str = ""趴酣;

for(int i = 0 ;i < 100 ;i ++) {

str += i ;

}

總結(jié):

1. 字符串的使用采用直接賦值的方式完成;

2. 字符串的比較就使用equals()方法實(shí)現(xiàn)坑夯;

3. 字符串沒(méi)事別改變太多岖寞。

感悟:為什么String首字母大寫,因?yàn)樗且粋€(gè)類啊柜蜈,哈哈~~~ ? ?C#里邊是小寫的string仗谆,剛開(kāi)始寫Java的時(shí)候我就按照習(xí)慣寫的小寫的指巡。。隶垮。藻雪。。狸吞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勉耀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹋偏,更是在濱河造成了極大的恐慌便斥,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件威始,死亡現(xiàn)場(chǎng)離奇詭異枢纠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)黎棠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門晋渺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脓斩,你說(shuō)我怎么就攤上這事些举。” “怎么了俭厚?”我有些...
    開(kāi)封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)驶臊。 經(jīng)常有香客問(wèn)我挪挤,道長(zhǎng),這世上最難降的妖魔是什么关翎? 我笑而不...
    開(kāi)封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任扛门,我火速辦了婚禮,結(jié)果婚禮上纵寝,老公的妹妹穿的比我還像新娘论寨。我一直安慰自己,他們只是感情好爽茴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布葬凳。 她就那樣靜靜地躺著,像睡著了一般室奏。 火紅的嫁衣襯著肌膚如雪火焰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天胧沫,我揣著相機(jī)與錄音昌简,去河邊找鬼占业。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纯赎,可吹牛的內(nèi)容都是我干的谦疾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼犬金,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼念恍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起佑附,我...
    開(kāi)封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤樊诺,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后音同,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體词爬,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年权均,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顿膨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叽赊,死狀恐怖恋沃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情必指,我是刑警寧澤囊咏,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站塔橡,受9級(jí)特大地震影響梅割,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葛家,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一户辞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癞谒,春花似錦底燎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至桌吃,卻和暖如春殊校,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背读存。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工为流, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呕屎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓敬察,卻偏偏與公主長(zhǎng)得像秀睛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莲祸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容