欧美日韩国产一区,亚洲一区视频,色综合久久久久,私密按摩师舌头伸进去了,99re6这里只有精品,夜夜性日日交xxx性hd

5.字符與字符串

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

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

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

System.out.println("Hello_Word");

這個(gè)”Hello_Word”便是我們要講的字符串。
字符串,顧名思義,就是就是把字符串起來,也就是多個(gè)字符的集合。要講字符串,我們先來講講上章提到的字符。
Java用char類型來表示字母、數(shù)字、標(biāo)點(diǎn)符號(hào)以及其他特殊字符,我們?cè)趈ava中表示字符最簡(jiǎn)單的方法是用單引號(hào)嵌入字符,如:

char c = 'a';

當(dāng)然,單引號(hào)中也可以放入單個(gè)的漢字。
字符的本質(zhì)其實(shí)是數(shù)字,因?yàn)槊恳粋€(gè)字符在Unicode標(biāo)準(zhǔn)中都有對(duì)應(yīng)的數(shù)字值,稱為Unicode值,比如小寫的a是97

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

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

當(dāng)然char還可以操作Unicode字符,因?yàn)椴皇呛艹S茫栽诖艘仓皇翘峁└拍罟┎樵儯蛔錾钊胙芯俊?/p>

接下來是開始講字符串了

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

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

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

大妖怪

大妖怪

APP:1 帖子:76 回復(fù):200 積分:7517

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

夢(mèng)里巷口,可有你倚門回首

作者詳情》
Top