如何在不复制对象的情况下将字符串转换为char []?

Jor*_*ein 7 java string char java-8

我有一个字符串,我需要将其作为char数组遍历.当然通常的方法是使用toCharArray()

String str = "Hello";
char[] charArr = str.toCharArray();
Run Code Online (Sandbox Code Playgroud)

现在,toCharArray()的源代码如下.

public char[] toCharArray() {
    // Cannot use Arrays.copyOf because of class initialization order issues
    char result[] = new char[value.length];
    System.arraycopy(value, 0, result, 0, value.length);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

因此,Java在char []类型的内存中创建一个新对象,并将字符串对象复制到新对象.

我的问题是,是否可以在不复制数组的情况下将字符串用作char [].我的目的是节省内存空间.如果不可能,有这样的理由吗?

提前致谢!

Jon*_*eet 14

不,不是.不是没有反思,你应该避免.char[]通过反射与字符串中的底层相混淆是一种微妙的错误.您可以使用字符串访问字符串中的单个字符charAt,但如果您确实需要char[],则应该只调用toCharArray.

如果不可能,有这样的理由吗?

第一个原因:封装.该数组是私有实现细节.

第二个原因:不变性.字符串是不可变的,但数组永远不会.所以你可以修改底层的char数组,并且字符串会被突变,这让任何依赖于正常不变性的开发人员都感到惊讶.