我的问题是关于:Public String(char[] value)。任何人都可以帮助我:它是否在每个 value[i] 内部循环。具体来说,
Public String(char[] value) 是否意味着:
for each char[i]
returnedSTRING = returnedSTRING + char[i]
或不 ?
我的问题是关于:Public String(char[] value)。任何人都可以帮助我:它是否在每个 value[i] 内部循环。具体来说,
Public String(char[] value) 是否意味着:
for each char[i]
returnedSTRING = returnedSTRING + char[i]
或不 ?
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。
字符串对象在内部将所有字符串字符保存在char[]
数组中。此构造函数只是将整个数组复制到内部表示。查看来源:
public String(char value[]) {
int size = value.length;
this.offset = 0;
this.count = size;
this.value = Arrays.copyOf(value, size);
}
从文档:
分配一个新的 String 以便它表示当前包含在字符数组参数中的字符序列。字符数组的内容被复制;随后对字符数组的修改不会影响新创建的字符串。
字符数组的内容被复制。
根据源代码,就像 mishadoff 指出的那样,Arrays.copyOf(value, size)
被使用。但是, Arrays.copyOf(value, size)
调用System.arraycopy
反过来实际上并不迭代和分配,而是实际复制内存,类似于memcpy()
调用在 C/C++ 中所做的事情。这是由 Java 在内部完成的,因为它比普通循环快得多。System.arraycopy
是一种利用主机操作系统的内存管理功能的本机方法。
因此,要回答您的问题,字符不会在 for 中迭代,而是它们所在的整个内存块被 Java“批量”复制。
但是,它可能会因 Java 的版本而异。