有什么办法可以让我在StringBuilder中存储字符数组,以避免在执行toString()时创建它的副本。由于它是一个原始数组,因此就像深度复制一样,我希望避免生成此垃圾。
您可以将StringBuilder视为char[],接口支持该网桥CharSequnce
调用该方法charAt(int index)“等于”array[index]
该数组是一个私有字段,由于封装而不会暴露给公共客户。
避免这样做,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()