如何获取StringBuilder中的字符数组以避免数组复制

sky*_*sky 7 java string

有什么办法可以让我在StringBuilder中存储字符数组,以避免在执行toString()时创建它的副本。由于它是一个原始数组,因此就像深度复制一样,我希望避免生成此垃圾。

Dam*_*ash 5

您可以将StringBuilder视为char[],接口支持该网桥CharSequnce

调用该方法charAt(int index)“等于”array[index]

该数组是一个私有字段,由于封装而不会暴露给公共客户。


ben*_*enw 5

避免这样做,stringbuilder.toString().toCharArray()因为它会分配内存两次。

使用类似的东西:

char[] charArray = new char[stringbuilder.length()];
stringbuilder.getChars(0, stringbuilder.length(), charArray, 0);
Run Code Online (Sandbox Code Playgroud)

使用反射也是一个坏主意,因为它可能与未来的 Java 版本不兼容,并且您必须调整数组的大小,因为它的大小可能大于StringBuilder长度,请参见StringBuilder#capacity()


Inf*_*ion 4

不,你不能。

检查StringBuilder的来源。

char value[]是StringBuilder中存储的字符数组,它的引用只能通过getValue方法访问,该方法不是公共的。

因此,要么使用toString要么getChars