toCharArray是否调整了char数组的大小?

时间:2014-03-29 13:45:30

标签: java arrays

java中存在与toCharArray的混淆。在我编写此代码时,我注意到在此行ch = str.toCharArray(); char数组已经调整大小之后。

public static void main(String[] args){
    String str = "helo java";
    char[] ch = new char[str.length() + 1];
    ch = str.toCharArray();
    ch[str.length()] = '\uFDD0';
    for(int i = 0; ch[i] != '\uFFD0'; i++){
        System.out.print(ch[i]);
    }         
}

所以我的问题是这个函数重新调整数组的大小? 对不起,我的英语不好。谢谢

4 个答案:

答案 0 :(得分:2)

toCharArray()方法返回新的char数组,因此您之前的原始char数组丢失了 累计到String#toCharArray

  

返回一个新分配的字符数组,其长度为该字符串的长度,其内容初始化为包含此字符串表示的字符序列。

答案 1 :(得分:1)

.toCharArray()分配一个 new 字符数组,这意味着你在这里丢失原始数组。

请改为:

final CharBuffer charbuf = CharBuffer.allocate(str.length() + 1);
// String implements CharSequence, so this works
charbuf.append(str).append('\uffd0');
// charbuf.array() contains the underlying char array

答案 2 :(得分:0)

toCharArray不会调整char数组的大小。

char[] ch = new char[str.length() + 1];创建一个长度为10的新数组.str.length()为9。

ch = str.toCharArray();指定ch引用str.toCharArray()返回的新数组;所以现在ch引用了一个大小为9的数组。

现在ch[str.length()]将导致异常。

答案 3 :(得分:0)

char[] ch是对字符数组的引用,您可以将ch分配给不同的数组,例如:

char[] a = new char[1];
char[] b = new char[2];

char[] ch;
ch = a; // here ch is pointing to the same array as a, so it's length is 1.
ch = a; // here ch is pointing to the same array as b, so it's length is 2.

所以你可以像这样编码你想要的东西(当然有很多可能的实现):

public static void main(String[] args) {
    String str = "hello java";
    char[] ch = str.toCharArray();
    ch = Arrays.copyOf(ch, ch.length+1);
    ch[ch.length-1] = '\uFDD0';
    for (int i = 0; i< ch.length; i++) {
        System.out.print(ch[i]);
    }
}

如您所见,您可以使用Arrays.copyOf()将数组的副本重新调整为新长度,然后在那里引入新角色。

请注意您在停止条件下使用ch[i] != '\uFFD0'进行迭代,这在Java中是不正确的,因为您要比较指针,而是使用!(ch[i].equals('\uFDD0')