第五章:面向?qū)ο蠡A——String類滤淳。

本章目標

  • 掌握String類的兩種實例化方式
  • 掌握String的兩種比較操作
  • 深入分析String類兩種實例化方式的區(qū)別
  • 掌握String的使用特點

1痛倚、具體內(nèi)容

1.1、實例化String對象

public class StringDemo01{
    public static void main(String args[]){
        String name = "LiXingHua" ;         // 實例化String對象
        System.out.println("姓名:" + name) ;
    }
};
輸出結(jié)果:
姓名:LiXingHua
public class StringDemo02{
    public static void main(String args[]){
        String name = new String("LiXingHua") ;         // 實例化String對象
        System.out.println("姓名:" + name) ;
    }
};
輸出結(jié)果:
姓名:LiXingHua

1.2忌穿、String的內(nèi)容比較

現(xiàn)在先簡單回顧一下连躏,基本數(shù)據(jù)類型使用“==”進行比較

范例:使用“==”進行比較

public class StringDemo03{
    public static void main(String args[]){
        int x = 30 ;
        int y = 30 ;
        System.out.println("兩個數(shù)字的比較結(jié)果:" + (x==y)) ;
    }
};
兩個數(shù)字的比較結(jié)果:true
public class StringDemo04{
    public static void main(String args[]){
        String str1 = "hello" ;                 // 直接賦值
        String str2 = new String("hello") ;     // 通過new賦值
        String str3 = str2 ;                    // 傳遞引用
        System.out.println("str1 == str2 --> " + (str1==str2)) ;    // false
        System.out.println("str1 == str3 --> " + (str1==str3)) ;    // false
        System.out.println("str2 == str3 --> " + (str2==str3)) ;    // true
    }
};
輸出結(jié)果
str1 == str2 --> false
str1 == str3 --> false
str1 == str2 --> true

此時就必須進行內(nèi)存的分析石景。


現(xiàn)在使用的判斷相等更舞,是判斷地址空間是否相等畦幢,判斷的是地址值。
如果想要判斷其內(nèi)容是否相等缆蝉,則就必須使用String類提供的equals()方法完成宇葱。此方法使用如下:

public class StringDemo05{
    public static void main(String args[]){
        String str1 = "hello" ;                 // 直接賦值
        String str2 = new String("hello") ;     // 通過new賦值
        String str3 = str2 ;                    // 傳遞引用
        System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ; // true
        System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ; // true
        System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ; // true
    }
};
輸出結(jié)果:
str1 == str2 --> true
str1 == str3 --> true
str1 == str2 --> true

結(jié)論:String有兩種比較方式

  • 一種是使用“==”完成,比較的是地址值刊头。
  • 另一種是使用“equals()”方法完成黍瞧,比較的是具體的內(nèi)容,開發(fā)中比較常用芽偏。

1.3雷逆、兩種實例化方式的區(qū)別

在String中可以使用直接賦值和new調(diào)用構(gòu)造方法的方式完成,那么使用哪種更合適呢污尉?
如果想解決這樣的問題膀哲,則必須從字符串的特征說起。

public class StringDemo06{
    public static void main(String args[]){
        System.out.println("hello".equals("hello")) ;
    }
};
輸出結(jié)果:
true

了解此處之后被碗,實際上之前的操作:

String name = "LiXingHua";

就表示將一個堆內(nèi)存空間的指向給了棧內(nèi)存空間某宪。

只有掌握了這一點之后,才可以分析出使用哪種實例化方式更合適锐朴,例如現(xiàn)在有以下的題目:

public class StringDemo07{
    public static void main(String args[]){
        String str1 = "hello" ;                 // 直接賦值
        String str2 = "hello" ;                 // 直接賦值
        String str3 = "hello" ;                 // 直接賦值
        System.out.println("str1 == str2 --> " + (str1==str2)) ;    // true
        System.out.println("str1 == str3 --> " + (str1==str3)) ;    // true
        System.out.println("str2 == str3 --> " + (str2==str3)) ;    // true
    }
};
輸出結(jié)果:
str1 == str2 --> true
str1 == str3 --> true
str1 == str2 --> true

以上三個對象的內(nèi)存地址都一樣兴喂。



因此,使用直接賦值的方式焚志,可以有效的節(jié)省內(nèi)存衣迷。

那么,如果現(xiàn)在使用new String()的方式呢酱酬?

public class StringDemo08{
    public static void main(String args[]){
        String str1 = new String("hello") ; 
    }
};

開辟了兩個空間壶谒。

使用直接賦值的方式只需要一個實例化對象即可,而是用new String()的方式則需要開辟兩個內(nèi)存對象膳沽。開發(fā)中最好使用直接賦值的方式完成汗菜。

1.4、字符串的內(nèi)容不可改變

這是一個重要的特征挑社。

public class StringDemo09{
    public static void main(String args[]){
        String str = "hello" ;      // 聲明字符串
        str = str + " world!!!" ;   // 修改字符串
        System.out.println("str = " + str) ;
    }
};
輸出結(jié)果:
str = hello world!!!

此時陨界,字符串對象是改變了,但是字符串變了嗎痛阻?

實際上字符串內(nèi)容的改變菌瘪,改變的是內(nèi)存地址的引用關系。
所以阱当,在開發(fā)匯總應該避免如下的使用操作:

public class StringDemo10{
    public static void main(String args[]){
        String str1 = "LiXingHua" ;     // 聲明字符串對象
        for(int i=0;i<100;i++){         // 循環(huán)修改內(nèi)容
            str1 += i ;                 // 字符串的引用不斷改變
        }
        System.out.println(str1) ;
    }
};
輸出結(jié)果:
LiXingHua0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 

但是這樣的操作麻车,要斷開連接引用100次才可以完成缀皱。這樣的操作性能很低斗这,應該避免使用动猬,而如果非要使用這種操作,在后面的Java常用類庫中將介紹StringBuffer類表箭,專門完成這樣的功能赁咙。

2、總結(jié)

1免钻、String要是用直接賦值的方式彼水,因為使用new會開辟兩個空間,造成空間浪費
2极舔、一個字符串就是String的匿名對象
3凤覆、字符串的比較方式有兩種:“==”、“equals()”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拆魏,一起剝皮案震驚了整個濱河市盯桦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渤刃,老刑警劉巖拥峦,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卖子,居然都是意外死亡略号,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門洋闽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玄柠,“玉大人,你說我怎么就攤上這事诫舅∮鹄” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵骚勘,是天一觀的道長铐伴。 經(jīng)常有香客問我,道長俏讹,這世上最難降的妖魔是什么当宴? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮泽疆,結(jié)果婚禮上户矢,老公的妹妹穿的比我還像新娘。我一直安慰自己殉疼,他們只是感情好梯浪,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布捌年。 她就那樣靜靜地躺著,像睡著了一般挂洛。 火紅的嫁衣襯著肌膚如雪礼预。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天虏劲,我揣著相機與錄音托酸,去河邊找鬼。 笑死柒巫,一個胖子當著我的面吹牛励堡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堡掏,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼应结,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泉唁?” 一聲冷哼從身側(cè)響起鹅龄,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎游两,沒想到半個月后砾层,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡贱案,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年肛炮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宝踪。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侨糟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘩燥,到底是詐尸還是另有隱情秕重,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布厉膀,位于F島的核電站溶耘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏服鹅。R本人自食惡果不足惜凳兵,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望企软。 院中可真熱鬧庐扫,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萨醒,卻和暖如春斟珊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背验靡。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工倍宾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胜嗓。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像钩乍,于是被迫代替她去往敵國和親辞州。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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