gpt4 book ai didi

java - 在某些情况下直接访问 String 的后备数组是否合理?

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:57 25 4
gpt4 key购买 nike

我在做文本处理软件的优化工作,其中经常用到下面的类:

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 的后备数组是私有(private)的是有原因的。这种方法有哪些潜在问题?

最佳答案

将会发生的一件事是您致力于 JDK 的一种特定实现。例如,Java 7 Update 6 完全改进了 char[] 的使用。这就是为什么只有当您的代码非常短暂,基本上是一次性代码时才应该容忍这种方法。

如果您只是阅读 char[],并且您正在为 OpenJDK Java 7 Update 6 编码,则不会引入任何错误。

另一方面,全世界 95% 的 Java 程序员可能会对反射(reflect) String 内部结构的代码摇头,所以要小心 :)

关于java - 在某些情况下直接访问 String 的后备数组是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com