StringBuffer(String str) 和 StringBuffer(CharSequence chars)



1.我在这两者之间感到困惑,如果是这样,它们是否具有不同的功能,那么如何?

StringBuffer(CharSequence chars) 

StringBuffer(String str)

2. 字符串和字符序列之间的基本区别是什么(特殊功能)?

CharSequence是一个

接口,因此您无法直接实例化它。 String 是实现 CharSequence 接口的具体类。 StringBuffer还实现了CharSequence接口。

至于为什么StringBuffer有两个构造函数,一个采用String,另一个采用CharSequence,几乎可以肯定是因为(根据Javadoc中的Since行)直到Java v1.4才添加CharSequence,而StringBuffer(和String)在Java 1.0中

CharSequence是一个接口;碰巧String实现它。

这意味着,例如,当您在String上调用.charAt()时,真正调用的是这种CharSequence方法的String实现。

CharSequence的javadoc中可以看出,JDK中真正实现这个接口的类并不多。

至于为什么两个构造函数,StringBuffer可以追溯到Java 1.0,而CharSequence只出现在1.4中;然而,这也是StringBuilder(你应该使用,实际上,而不是StringBuffer)有两个构造函数的情况(一个用CharSequence作为参数,另一个用String作为参数), 因此,当String作为参数传递时,可能会隐含优化。至于这样的优化可能是什么,嗯,这是一个"使用源代码,卢克"(tm)的情况。

作为不在JDK中的CharSequence实现的示例,例如,您可以看到我的一个项目:largetext。请注意,除其他事项外,从Pattern生成Matcher使用CharSequence而不是String作为参数;由于String实现了CharSequence,因此,将String作为参数传递是有效的。

public StringBuffer(String str):构造初始化为指定字符串内容的字符串缓冲区。字符串缓冲区的初始容量为 16 加上字符串参数的长度。

public StringBuffer(CharSequence seq):构造一个字符串缓冲区,其中包含与指定 CharSequence 相同的字符。字符串缓冲区的初始容量为 16 加上 CharSequence 参数的长度。如果指定的 CharSequence 的长度小于或等于零,则返回容量为 16 的空缓冲区。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuffer.java#StringBuffer.%3Cinit%3E%28java.lang.String%29

最新更新