今天在一篇博客里,意外的看到了一段關於java中對字符串的“+”運算的處理(博客原文:
http://blog.csdn.net/yirentianran/article/details/2871417
),突然間想到要詳細了解下這個知識點,於是從網上找資料學習了一下。
首先羅列下已知的java中字符串連接方式
第一種:使用Stirng類的concat方法
形式:
String c = a.concat(b);
順便學習了concat的源碼,concat的實現方式是這樣的
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
} |
第二種:利用StringBuffer(或者StringBuilder)
形式:
StringBuilder st = new StringBuilder();
c = st.append(a).append(b).toString();
第三種:也是最最常用的,“+”運算
形式:
c = a+b;
問題是:java虛擬機是怎么執行這個運算的?“+”代表了什么,是不是映射了某個方法?
首先看下jdk1.6版本中的一個說明:
Java 語言提供對字符串串聯符號("+")以及將其他對象轉換為字符串的特殊支持。字符串串聯是過
StringBuilder
(或
StringBuffer
)類及其
append
方法實現的。字符串轉換是通過
toString
方法實現的,該方法由
Object
類定義,並可被 Java 中的所有類繼承。有關字符串串聯和轉換的
對於java的這個機制,我是一點都不了解,試着從網上百度了一些,發現這個問題還是有不少人感興趣的,現在就自己總結一下這方面的知識:
(1)在水木社區主站,我找到了一個相同的問題,得知了兩點:一是string是編譯器有特殊處理的類;二是,在《thinking in java》一書里有提及(查書后發現也只是略有提交,沒有詳細闡述)。
(2)最后是一篇博客,作者通過反編譯證明了一開始那篇文章的說法。閱讀后也是受益匪淺,非常感謝作者的貢獻和分享。