Java - Public String(char[] value)

前端 未结 4 1858
夕颜
夕颜 2021-01-20 02:58

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

相关标签:
4条回答
  • 2021-01-20 03:17

    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);
    }
    
    0 讨论(0)
  • 2021-01-20 03:18

    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.

    0 讨论(0)
  • 2021-01-20 03:23

    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.

    0 讨论(0)
  • 2021-01-20 03:23

    See String class source code

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

    0 讨论(0)
提交回复
热议问题