我的问题是:Public String(char[] value)。任何人都可以帮助我:它是否内部循环每个值[i]或不。具体地,
Public String(char [] value)表示:
for each char[i]
returnedSTRING = returnedSTRING + char[i]
是不是?
答案 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)
但是,根据Java的版本,它可能会有所不同。