2012-04-12 106 views
5

我不確定以下內容是否會導致深度或淺度複製?對數組的深度或淺度副本克隆方法嗎?

public void viewImages(final String[] instancesFilename) { 

    String[] instances = (String[])instancesFilename.clone();  
} 

是否有一個簡單快捷的方法來深度複製字符串數組?

回答

14

Java中的字符串是不可變的(無法更改它們的值)。因此,複製字符串時,深度和淺度副本之間沒有可檢測到的差異。

只是爲了進一步參考:副本會很淺,但這不應該是一個問題,因爲字符串是不可變的。

哦,有趣的事實:字符串不能用克隆方法克隆,因此如果您嘗試使用克隆方法執行字符串的深層副本,您將得到一個CloneNotSupportedException。

+0

作者要求複製'String []',而不是'String'。 'instancesFilename'的元素可以稍後從外部改變,所以OP想要創建數組的副本。 – 2012-04-12 14:19:15

+0

這是*可檢測*(是參考相同),但如果你正確使用字符串,它不應該*顯着*。 – 2012-04-12 14:19:21

+0

@PhilippReichart:但是OP已經在執行一個克隆 - 「深層拷貝」與「淺拷貝」在這種情況下只能是關於字符串是否被克隆的問題 - 正如這個回答所說的那樣,它幾乎總是不重要的。 – 2012-04-12 14:20:12