Java - 公共字符串(char []值)

时间:2012-06-26 13:31:44

标签: java

我的问题是:Public String(char[] value)。任何人都可以帮助我:它是否内部循环每个值[i]或不。具体地,

Public String(char [] value)表示:

for each char[i]
returnedSTRING = returnedSTRING + char[i] 
是不是?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

public String(char value[]) {
        int size = value.length;
        this.offset = 0;
        this.count = size;
        this.value = Arrays.copyOf(value, size);
}

答案 2 :(得分:2)

来自文档:

  

分配一个新的String,使其表示当前包含在字符数组参数中的字符序列。复制字符数组的内容;后续修改字符数组不会影响新创建的字符串。

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

所以为了回答你的问题,字符不会在for中迭代,而是它们所在的整个内存块被Java“大量”复制

答案 3 :(得分:1)

请参阅String class source code

但是,根据Java的版本,它可能会有所不同。