3

我的问题是关于:Public String(char[] value)。任何人都可以帮助我:它是否在每个 value[i] 内部循环。具体来说,

Public String(char[] value) 是否意味着:

for each char[i]
returnedSTRING = returnedSTRING + char[i] 

或不 ?

4

4 回答 4

6

Java 是开源的,如果您将源代码附加到 Eclipse,您可以随时使用 F3 来检查功能。在这种情况下,String 类具有以下构造函数,这是您正在寻找的:

/**
 * Allocates a new {@code String} so that it represents the sequence of
 * characters currently contained in the character array argument. The
 * contents of the character array are copied; subsequent modification of
 * the character array does not affect the newly created string.
 *
 * @param  value
 *         The initial value of the string
 */
public String(char value[]) {
    int size = value.length;
    this.offset = 0;
    this.count = size;
    this.value = Arrays.copyOf(value, size);
}

编辑:如果您想知道,Arrays.copyOf调用System.arraycopy

于 2012-06-26T13:38:57.190 回答
2

字符串对象在内部将所有字符串字符保存在char[]数组中。此构造函数只是将整个数组复制到内部表示。查看来源:

public String(char value[]) {
        int size = value.length;
        this.offset = 0;
        this.count = size;
        this.value = Arrays.copyOf(value, size);
}
于 2012-06-26T13:36:34.600 回答
2

从文档:

分配一个新的 String 以便它表示当前包含在字符数组参数中的字符序列。字符数组的内容被复制;随后对字符数组的修改不会影响新创建的字符串。

字符数组的内容被复制。 根据源代码,就像 mishadoff 指出的那样,Arrays.copyOf(value, size)被使用。但是, Arrays.copyOf(value, size)调用System.arraycopy反过来实际上并不迭代和分配,而是实际复制内存,类似于memcpy()调用在 C/C++ 中所做的事情。这是由 Java 在内部完成的,因为它比普通循环快得多。System.arraycopy是一种利用主机操作系统的内存管理功能的本机方法。

因此,要回答您的问题,字符不会在 for 中迭代,而是它们所在的整个内存块被 Java“批量”复制

于 2012-06-26T13:39:05.040 回答
1

参见String 类源代码

但是,它可能会因 Java 的版本而异。

于 2012-06-26T13:36:29.217 回答