2014-04-01 28 views
0

在String構造的代碼 -在這種情況下'大小> originalValue.length'在字符串構造函數 - 字符串(原始字符串)?

public String(String original) { 
    int size = original.count; 
    char[] originalValue = original.value; 
    char[] v; 
    if (originalValue.length > size) { 
      int off = original.offset; 
      v = Arrays.copyOfRange(originalValue, off, off+size); 
    } 
      . 
      . 
      . 
    }  

我感到困惑的這一行:

if (originalValue.length > size) { 

在情況下,我們有一些像

String s1 = "Abcd"; 
String s3 = new String(s1.substring(3)); 

然後根據代碼

original = "d"; 
size = 1; 
originalValue.length = 1; 

所以sizeoriginalValue.length在這裏是一樣的。

我錯了嗎?我尋找答案,但找不到任何滿意的答案,所以我爲此發佈了一個新問題。當size> originalValue.length時,請幫助我理解確切的情況。謝謝

+0

這是舊代碼。你在看什麼版本的Java? –

+0

@SotiriosDelimanolis - 我猜他正在使用Jdk 1.6。 – TheLostMind

+0

是JDK 1.6。被這個部分弄糊塗了,s0問道。 –

回答

1

這是非常過時的。字符串曾經能夠分享其基礎char[] value。例如,當你會得到一個String

"a string".substring(3); 

字符串"a string"的子了char[]它與substring返回的String共享。爲此,String必須保持countoffset來告訴它當前String實際開始的位置。

所以您看到的代碼是用於這樣的String,以便在創建新的String時只使用原始String的相關部分。

這在Java 7中的某個時間點發生了變化。String實例不再共享其基礎char[]

相關問題