2014-04-01 29 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[]

相关问题