簡體   English   中英

StringBuilder.append()方法是否填滿字符串池?

[英]Does StringBuilder.append() method fill up the string pool?

我知道使用大多數String方法將返回一個新的字符串對象,該對象將添加到字符串池中,並且作為參數傳遞給這些方法的字符串文字也會添加到字符串池中。

例如,下面的代碼將創建三個字符串對象,即:“ Hello”,““ World!””和“ Hello World!”。 它們添加到字符串池中,這意味着傳遞給concat()方法的參數將添加到字符串池中。

我很想知道是否將傳遞給StringBuilder.append()方法的字符串文字參數和StringBuilder中的任何其他方法添加到字符串池中。

或者,也許我應該問是否將傳遞給任何其他類中任何其他方法的所有字符串文字參數也添加到字符串池中?

我也想添加基於Java 6的這些事實。

String s = "Hello " ;
s = s.concat("World!") ;

String方法(在intern()旁邊)都不會填充String池。 而且StringBuilder的方法都沒有做到這一點。 在將類加載到內容池時添加文字。 因此,如果調用concat(),它將獲得一個內部常量對象引用。 但是concat並沒有做任何事情來實習,也沒有做任何依賴於被拘禁者的事情。

我很想知道是否將傳遞給StringBuilder.append()方法的字符串文字參數和StringBuilder中的任何其他方法添加到字符串池中。

或者,也許我應該問是否將傳遞給任何其他類中任何其他方法的所有字符串文字參數也添加到字符串池中?

所有的字符串文字都放入字符串池中。 文字的使用方式無關緊要。

從Java 1.7:-

 public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    }

除非使用String.intern()String文字 ,否則不會將其添加到String池中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM