3

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[] value) means:

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

or not ?

8
  • 1
    It copies the contents of the array into a newly-constructed String's internal buffer; that will necessarily involve a loop somewhere... Commented Jun 26, 2012 at 13:34
  • @OliCharlesworth, That should be. However, actually I try to get which one is faster and why ? Commented Jun 26, 2012 at 13:36
  • Which one between what and what? Commented Jun 26, 2012 at 13:40
  • @OliCharlesworth it doesn't need a loop, since it calls System.arraycopy to do the heavy lifting, which just copies whole blocks of memory at a time; it doesn't have to iterate through each tiny element Commented Jun 26, 2012 at 13:49
  • @AndreiBârsan: Indeed, but there will be a loop inside arrayCopy. Commented Jun 26, 2012 at 13:55

4 Answers 4

6

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.

Sign up to request clarification or add additional context in comments.

Comments

2

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);
}

Comments

2

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.

Comments

1

See String class source code

However, it can be different depending on version of Java.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.