gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:01 24 4
gpt4 key购买 nike

我有一个字符串,我需要将它作为一个字符数组进行遍历。当然正常的方法是使用toCharArray()

String str = "Hello";
char[] charArr = str.toCharArray();

现在,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;
}

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

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

提前致谢!

最佳答案

不,不是。并非没有反射(reflection),你应该避免。通过反射弄乱字符串中的底层 char[] 是导致细微错误的秘诀。您可以使用 charAt 访问字符串中的单个字符,但如果您确实需要 char[],您应该调用 toCharArray

If this is not possible, is there a reason so?

第一个原因:封装。该数组是私有(private)实现细节。

第二个原因:不变性。字符串是不可变的,但数组从不 是。因此,您可以修改底层的 char 数组,并且字符串会发生变化,这让任何依赖正常不变性的开发人员感到惊讶。

关于java - 如何在不复制对象的情况下将字符串转换为 char[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443318/

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