java:字符串的“+”運算


今天在一篇博客里,意外的看到了一段關於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)最后是一篇博客,作者通過反編譯證明了一開始那篇文章的說法。閱讀后也是受益匪淺,非常感謝作者的貢獻和分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM