Java Append()方法:String vs. StringBuilder

时间:2014-04-29 01:22:53

标签: java

将String的子集附加到String对象时,append语句指定的字符数中的最后一个位置不包含在返回对象的一部分中。但是,将char数组的子集附加到char数组对象时,append语句指定的字符数中的最后一个位置将作为返回对象的一部分包含在内。这是为什么?

示例 -

class  String {
    public static void main(String args[]) {
        StringBuilder sb = new StringBuilder();
        String name = "Java7";
        sb.append(name, 1,3);
        System.out.println(sb);
    }
}
/* result is:

 av
 */

class  char {
    public static void main(String args[]) {
        StringBuilder sb = new StringBuilder();
        char[] name = {'J', 'A', 'V', 'A', '7'};
        sb.append(name, 1,3);
        System.out.println(sb);
    }
}
/* result is:

AVA
*/

2 个答案:

答案 0 :(得分:0)

方法不同。 the one that accepts a char[]中的第三个参数是长度,即要追加的字符数。

  

str偏移开始的char数组index的字符是   按顺序附加到该序列的内容中。的长度   此序列会增加len的值。

The one that accepts a CharSequence(您的示例中为String)说

  

附加从索引s开始的参数start的字符,   按顺序,到此序列的内容直到(独占)索引   end

答案 1 :(得分:0)

当char [] http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(char[],int,int)

将char数组参数的子数组的字符串表示形式追加到此序列中。 从索引偏移开始的char数组str的字符按顺序附加到该序列的内容。此序列的长度增加len的值。

整体效果就像通过方法String.valueOf(char [],int,int)将参数转换为字符串一样,然后将该字符串的字符附加到此字符序列。

参数: str - 要追加的字符。 offset - 要追加的第一个char的索引。 len - 要追加的字符数。

当String http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(java.lang.CharSequence,int,int)

将指定CharSequence的子序列追加到此序列。 从索引start开始的参数s的字符按顺序附加到该序列的内容,直到(独占)索引结束。这个序列的长度增加了end - start的值。

设n是执行append方法之前的字符序列的长度。然后,如果k小于n,则该字符序列中索引k处的字符变为等于该序列中索引k处的字符;否则,它等于参数s中索引k + start-n处的字符。

如果s为null,则此方法附加字符,就好像s参数是包含四个字符的序列" null"。

参数: s - 要追加的序列。 start - 要追加的子序列的起始索引。 end - 要追加的子序列的结束索引。 返回: 对此对象的引用。

所以当你使用sb.append(name,1,3)附加char []时;意味着从索引1开始,需要3个字符。

和String sb.append(name,1,3);意味着从索引1开始并在索引3处停止,但不包括3,这是一个(3-1)= 2长字符串