鍍金池/ 問答/Java/ 關(guān)于String對(duì)象的toCharArray方法的疑問

關(guān)于String對(duì)象的toCharArray方法的疑問

突然看到String的toCharArray方法的實(shí)現(xiàn),但是想不通為啥要多此一舉:

public char[] toCharArray() {
        // Cannot use Arrays.copyOf because of class initialization order issues
        char result[] = new char[value.length];
        System.arraycopy(value, 0, result, 0, value.length);
        return result;
    }

直接返回value不就得了:

public char[] toCharArray() {
        return value;
    }
回答
編輯回答
巫婆

修改:
經(jīng)評(píng)論提醒,Java 中沒有引用傳遞,是我表達(dá)失誤。
數(shù)組是引用類型,也是值傳遞,只是 就是 value 的地址,因此修改會(huì)影響到 value。


原答案:

因?yàn)?Java 中數(shù)組實(shí)質(zhì)上是 Array 類的實(shí)例,如果直接返回 value,那么這會(huì)是一個(gè)引用傳遞,一旦你修改了 toCharArray() 返回值里某個(gè)位置上的字符,那個(gè) String 實(shí)例的值(即 value )也會(huì)跟著變動(dòng)。

2017年7月24日 21:36
編輯回答
呆萌傻

因?yàn)镾tring的設(shè)計(jì)是不可變的。直接返回底層數(shù)組的,就會(huì)破壞不可變了

2018年7月14日 08:23
編輯回答
深記你

這個(gè)只是把字符串,轉(zhuǎn)成了一個(gè)array,方便更好的操作字符,同時(shí),這里是一個(gè)引用,如果你改變toCharArray返回值上的某個(gè)位置的值,String中的值也是隨之而變

2018年4月2日 02:14