My question is about: Public String(char[] value). Can anybody help me: does it internally loops for every value[i] or not. Specifically,
does Public String(char[] v
String object save all string character in char[]
array internally. This constructor just copy the whole array to internal representation. See the sources:
public String(char value[]) {
int size = value.length;
this.offset = 0;
this.count = size;
this.value = Arrays.copyOf(value, size);
}
From the docs:
Allocates a new 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.
The contents of the character array are copied.
According to the source code, like mishadoff pointed out, Arrays.copyOf(value, size)
is used. However, Arrays.copyOf(value, size)
calls System.arraycopy
, in turn, which doesn't actually iterate & allocate but actually copies the memory, similarly to what a memcpy()
call would do in C/C++. This is done internally by Java since it's much faster than a normal loop. System.arraycopy
is a native method that takes advantage of the host OS's memory management features.
So to answer your question, the chars are not iterated over in a for, rather the whole memory block on which they are situated gets copied "in bulk" by Java.
Java is open source and if you attach the source to Eclipse you can always use F3 to go check the functions. In this case the String class has the following constructor which is what you are looking for:
/**
* 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);
}
Edit: If you are wondering, Arrays.copyOf calls System.arraycopy.
See String class source code
However, it can be different depending on version of Java.