老司机三级_天天干天天操天天爽_女人被爽到娇喘呻吟视频_久久国产精品99久久久大便 - 亚洲日本系列

5.字符與字符串

  • • 發(fā)表于 9年前
  • • 作者 大妖怪
  • • 3195 人瀏覽
  • • 7 條評論
  • • 最后編輯時間 7年前
  • • 來自 [技 術(shù)]

原創(chuàng)聲明:本文為作者原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載,經(jīng)授權(quán)轉(zhuǎn)載需注明作者和出處

記得在Hello_Word那章的時候,我們用到了這樣一句

System.out.println("Hello_Word");

這個”Hello_Word”便是我們要講的字符串。
字符串,顧名思義,就是就是把字符串起來,也就是多個字符的集合。要講字符串,我們先來講講上章提到的字符。
Java用char類型來表示字母、數(shù)字、標點符號以及其他特殊字符,我們在java中表示字符最簡單的方法是用單引號嵌入字符,如:

char c = 'a';

當然,單引號中也可以放入單個的漢字。
字符的本質(zhì)其實是數(shù)字,因為每一個字符在Unicode標準中都有對應的數(shù)字值,稱為Unicode值,比如小寫的a是97

char c = 97;
System.out.println(c);

這段代碼的運行結(jié)果就是小寫的a

當然char還可以操作Unicode字符,因為不是很常用,所以在此也只是提供概念供查詢,不做深入研究。

接下來是開始講字符串了

  • 字符串的聲明:
    我們的字符串用String來進行聲明,用雙引號包裹,有兩種方法,如:
    String str1 = "你好!";
    String str2 = new String("你好!");
    
    我們在雙引號中可以輸入任何我們想要顯示的東西,不限制長度,沒有類型,可以是字母,數(shù)字,下劃線,特殊符號,空格等等。
    以上兩種方式的區(qū)別以后會講到。
  • 字符串的拼接:
    當我們想把多個字符串拼接起來,組成一個新的字符串時,就需要用到字符串的拼接了,拼接的方法是用加號連接多個字符串:
    String a = "Hello "+"word";
    System.out.println(a);
    
    我們還可以連接兩個變量
    String a = new String("Hello ");
    String b = new String("word");
    String c = a + b;
    System.out.println(c);
    
    當一個字符串和別的類型的變量拼接起來時,別的類型的變量會自動被強轉(zhuǎn)成字符串,我們來看以下兩段程序:
    int a = 1;
    int b = 2;
    System.out.println(a+b);
    
    該程序的運行結(jié)果是毫無疑問是3,但是,如果這樣:
    int a = 1;
    int b = 2;
    System.out.println(""+a+b);
    
    程序的運行結(jié)果卻是12,原來就是1和2被強轉(zhuǎn)成了普通字符串然后被拼接到了一起。
  • 字符串的比較:
    在上一章我們學了比較運算符,那么在java中我們?nèi)绾伪容^兩個字符串是否相等呢?用equals!,equals是String對象里面的一個方法。
    我們來對比下equals和==的區(qū)別:
    String str1 = new String("你好");
    String str2 = new String("你好");
    System.out.println(str1==str2);
    System.out.println(str1.equals(str2));
    
    這段代碼運行的結(jié)果是false true,造成這個結(jié)果的原因是:
    我們new了兩個String對象,也就是開辟了兩個不同的內(nèi)存空間,==比較的是內(nèi)存空間的位置是否相等,而euqals比較的則是內(nèi)存空間里面放的東西是否相等,當然,上章所述的八大類型的比較都是比較內(nèi)存空間的位置是否相等。
    String str1 = "你好";
    String str2 = "你好";
    System.out.println(str1==str2);
    System.out.println(str1.equals(str2));
    
    而這段代碼運行的結(jié)果是true true,造成這種結(jié)果的原因是:

這兩個變量都是被當做基本類型來使用的,沒有通過new關(guān)鍵字來創(chuàng)建的,因此虛擬機不會為這兩個String對象分配新的內(nèi)存堆,而是到String緩沖池中來尋找。首先為str1尋找String緩沖池內(nèi)是否有與”你好”相同值的String對象存在,此時String緩沖池內(nèi)是空的,沒有相同值的String對象存在,所以虛擬機會在String緩沖池內(nèi)創(chuàng)建此String對象,其動作就是new String(“你好”);。然后把此String對象的引用賦值給str1。然后為str2尋找String緩沖池內(nèi)是否有與”你好”相同值的String對象存在,此時虛擬機找到了一個與其相同值的String對象,這個String對象其實就是為str1所創(chuàng)建的String對象。既然找到了一個相同值的對象,那么虛擬機就不在為此創(chuàng)建一個新的String對象,而是直接把存在的String對象的引用賦值給str2。因為str1和str2都引用了同一個內(nèi)存對象,就是它自己等于自己,因此str1==str2的結(jié)果為true。
上述原理目前只需要了解即可,關(guān)于對象和指針,我們會在以后的章節(jié)陸續(xù)講到。

  • 然后我們需要注意一點,如果兩個String類型的值做比較的時候,盡量用已知的字符串去.equals變量,我們來看以下代碼:
    String str1 = null;
    System.out.println(str1.equals("你好"));
    
    這段話運行結(jié)果會拋出一個空指針異常,:
    Exception in thread "main" java.lang.NullPointerException
    
    原因是str1已經(jīng)是null了,也就是沒有指向任何對象,既然沒有對象,我們還要去找這個對象里面的方法,自然找不到,所以會拋出異常。
    如果我們改成:
    String str1 = null;
    System.out.println("你好".equals(str1));
    
    則會返回false
分享到:
7條評論
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回復:200 積分:7517

已加入社區(qū)[3229]天

夢里巷口,可有你倚門回首

作者詳情》
Top