【发布时间】:2012-12-18 13:52:50
【问题描述】:
我正在优化文本处理软件,其中使用了以下类:
class Sentence {
private final char[] textArray;
private final String textString;
public Sentence(String text) {
this.textArray = text.toCharArray();
this.textString = text;
}
public String getString() {
return textString;
}
public char[] getArray() {
return textArray;
}
}
如您所见,存在一些冗余:textString 的支持数组始终等于 textArray,但两者都被存储。
我希望通过去掉 textArray 字段来减少此类的内存占用。
有一个问题:这个类在代码库中被广泛使用,因此我无法摆脱 getArray() 方法。我的解决方案是去掉 textArray 字段,让 getArray() 方法通过反射返回 textSting 的支持数组。
结果会是这样的:
class Sentence {
private final String textString;
public Sentence(String text) {
this.textString = text;
}
public String getString() {
return textString;
}
public char[] getArray() {
return getBackingArrayUsingReflection(textString);
}
}
这似乎是一个可行的解决方案,但我怀疑 String 的后备数组是私有的是有原因的。这种方法有哪些潜在问题?
【问题讨论】:
-
为什么不返回 textString.toCharArray()?
-
因为textString.toCharArray()每次调用都会创建一个新数组,而且调用的频率很高。
-
也许您可以重构代码以使用您自己的
CharSequence实现,而不是在String上使用反射。
标签: java arrays string reflection