2014-03-26 30 views
0

我想用正則表達式來解析一個巨大的String largeStringmatcher.group的內存分配()

我使用matcher.group()獲得largeString的子串。我的問題是:

matcher.group()返回一個新的String對象,或者它只返回一個子字符串引用到largeString

據我所知定義子字符串只分配一個指針和3個實例的內存。我想保留largeString用於其他目的,所以我寧願保留子字符串實例,而不是創建新的String

+0

@fge:有關你的'CharSequence'事情的一個問題......我想。 – aliteralmind

回答

2

這在某種程度上已經在別處得到了回答。

自Java 7u6以來,所有的子串都是它們自己的String對象。所以你不會再爲16個字節分配內存,你會爲整個String對象分配內存。

信用:https://stackoverflow.com/a/14193606/1159805

編輯:這是解釋爲什麼變化所提出的建議的副本:http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010257.html

+0

謝謝,我正在看一篇舊的博客文章:P 這意味着如果我想節省內存,比如說,我會存儲matcher.start()和end()? (只是2'int'),並在稍後動態調用子串方法? – Ivan

+0

@Ivan沒錯,但請記住調用'substring' *會創建一個全新的String對象。 –

+0

由於'子串'在運行中,它們暫時使用並且將被垃圾收集。 – Ivan