Java解惑之字元謎題(2)

2021-09-01 01:34:42 字數 2094 閱讀 8937

11、字元相加

system.out.println("h" + "a");

system.out.println('h' + 'a');

上面兩行**列印出來的結果是不同的,第一行的結果是ha,第二行的結果是169。這個很明顯吧,'h'和'a'都是char型別的字面常量,char型別不能相加,會自動轉換為int型別進行計算。

如果需要對字元進行字串拼接,有以下幾種方法:

(1) 在前面預置乙個空字串,例如:"" + 'h' + 'a';

(2) 將第乙個運算元用string.valueof顯示轉換成乙個字串,例如:string.valueof('h') + 'a';

(3) 使用stringbuffer或stringbuilder,例如:

stringbuffer buffer = new stringbuffer();
(4) 如果使用jdk5.0或更高版本,可以用printf方法,例如:system.out.printf("%c%c", 'h', 'a')。

12、字串陣列的輸出

char numbers = ;

system.out.println("hi~ " + numbers);

輸出結果:

hi~ [c@6bbc4459

但是,有些常用的函式會有char的過載版本,system.out.println(numbers)將會輸出123。

13、字串相等

字串賦值有以下幾種情況:

string s1= "one";

string s2= s1;

string s3= new string("one");

string s4= "on";

string s5= "e";

string s6= s4+ s5;

string s7 = "on" + "e";

其中,s1、s2、s7是相等的,它們都是直接指向string池裡的「one」,s3和s7則不同,s3指向堆疊中的物件,這個物件存的是string池中「one」的位址,s6也指向堆疊中的物件,但是是乙個新的物件,與s3指向的物件不是同乙個,同樣,這個物件儲存的也是string池中的「one」的位址。

判斷字串相等時應優先使用equals函式,「==」比較的是物件的標示而不是物件的值。

14、轉義字元

system.out.println("a\u0022.length()+\u0022b".length());

這行**將輸出什麼?首先我們需要確認\u0022代表什麼,這個轉義字元是雙引號,因此它等價於"a".length()+"b".length(),這樣看就清楚了,結果是2。

一般情況下,請不要在程式中用轉義字元,很容易混淆,而且很難記住每個轉義字元代表什麼...

15、非法的轉義字元

我們直接看下面這段注釋:

程式中的這段注釋會報錯!注釋也會報錯?是的,這個錯誤是invalid unicode,問題出在」\units「,它被認為是乙個非法的轉義字元。因此,所有的「\u」都需要注意,要確保它不出現在乙個合法的unicode轉義字元上下文之外,即使在注釋中也是如此。

16、注釋中的行分隔符

依舊是注釋中的問題,來看下面的**:

// note: \u000a is unicode representation of linefeed(lf)

char c = 0x000a;

上面的**在注釋那一行報錯了!問題出在」\u000a「是換行符,因此」//「其實只限定到」note: 「,後面的字串就是下一行的了。這種行為是平台無關的,在任何平台上都不能編譯通過。

17、還是轉義字元

天哪,能不能不要講轉義字元了,真的好醜!呃,直接上結論吧,如非必須,不要使用轉義字元!

18、字串乳酪

19、多行注釋

多行注釋遇到第乙個」*/「就表示注釋塊結束,如下:

/* if ("+-*/" >= 0)" +

return 0;

*/在第一行」*/「的地方注釋塊就結束了,真不安全啊!遇到巢狀的多行注釋就更容易出問題了,最外層的」/*「遇到第乙個」*/「就結束注釋了。因此,最好還是使用單行注釋」//「。

20、正規表示式的」.「

java解惑(謎題41到謎題)

b 謎題41 域和流 b 下面的方法實現將乙個檔案拷貝到另乙個檔案,但它 color red 並非總是能夠做到 color 這一點,為什麼不能呢?如何修改?static void copy string src,string dest throws ioexception finally 問題在於f...

java解惑之表示式之謎 謎題8

謎題8 dos equis 這個謎題將測試你對條件操作符 冒號問號操作符 的掌握程式,看下面的程式會列印出什麼結果?public class dosequis 只要對條件操作符了解的都知道第一條列印語句應該列印的是字元x,第二條列印語句也應該列印出字元x,即列印結果應當是xx。而執行後,實際列印出來...

java 解惑3 string 字串

system.out.print h a system.out.print h a 這兩個程式輸出的都是 ha 嗎?不是第乙個是 ha 第二個是 169 因為第二個 h 和 a 都不是string,所以 執行的是加法而不是字串連線。如果也要活得 ha 可以1.預置乙個空字串2.使用stirng.va...