⊙ String 是一個(gè)字符串類,在創(chuàng)建之后是不能改動(dòng)的!如果想改變字符串,可以用StringBuilder 或者 StringBuffer !
⊙ String類是不可變(final)的,對(duì)String類的任何改變,都是返回一個(gè)新的String類對(duì)象.這樣的話把String類的引用傳遞給一個(gè)方法,改方法對(duì)String的任何改變,對(duì)原引用指向的對(duì)象沒有任何影響,這一點(diǎn)和基本數(shù)據(jù)類型相似. String s1,s2; s1 = "abc"; s2 = s1; //對(duì)于一個(gè)對(duì)象(String對(duì)象除外),這里會(huì)產(chǎn)生一個(gè)“別名現(xiàn)象”,即s2 ,s1中任何一個(gè) //的改變都會(huì)引起另一個(gè)的改變 s2 = "def"; //這樣操作之后s1還是abc,s2是def.
因此,我們可以把String類的不可變性理解成:String類就象基本類型一樣,不會(huì)產(chǎn)生別名現(xiàn)象!
⊙ 假如有一語句: String s = "abc"; 然后再用一語句:s = "def"; //既然String對(duì)象是不可變的,此處為什么不會(huì)報(bào)錯(cuò)?
---》此處,我們只是把引用s指向另一個(gè)String對(duì)象(“def”),而原來的"abc"仍然在堆棧中,我們可以把 String 對(duì)象理解成一個(gè) 基本類型的變量,對(duì)變量賦值以后,我們?nèi)钥梢愿淖冏兞克赶虻闹?,就象:int i = 5; i = 6 ;
⊙ 對(duì)于String類中的方法,每一個(gè)看起來都會(huì)修改值,實(shí)際上都是創(chuàng)建了一個(gè)全新的String對(duì)象,以包含修改后的字符串內(nèi)容。而最初的String對(duì)象則絲毫未動(dòng)。比如 : String q = "howdy"; System.out.println(q); //howdy System.out.println(q.toUpperCase()); //HOWDY System.out.println(q); //此處的輸出仍然是howdy,因?yàn)榉椒ǖ恼{(diào)用不會(huì)影響原來String對(duì)象的值
|