1.我对这两者感到困惑,如果是这样,他们有不同的功能吗?
StringBuffer(CharSequence chars)
和
StringBuffer(String str)
2。 String和CharSequence(特殊功能)之间的基本区别是什么?
答案 0 :(得分:5)
CharSequence
是一个接口,因此您无法直接实例化它。 String
是实现CharSequence
接口的具体类。 StringBuffer
还实现了CharSequence
接口。
至于为什么StringBuffer
有两个构造函数,一个是String
,一个是CharSequence
,几乎可以肯定是因为{在Java v1.4中添加Javadoc)Since
,而CharSequence
(和StringBuffer
)在Java 1.0中
答案 1 :(得分:4)
CharSequence
是一个接口;它发生在String
实现它。
这意味着,例如,当您在.charAt()
上致电String
时,真正称之为String
此CharSequence
方法的实施。
从CharSequence
的javadoc可以看出,JDK中没有多少类实际实现此接口。
至于为什么两个构造函数StringBuffer
可以追溯到Java 1.0而CharSequence
只出现在1.4中;但是,StringBuilder
(您应该使用,实际上,而不是StringBuffer
)有两个构造函数(一个以CharSequence
作为参数,另一个使用{{} 1}}作为参数),因此当String
作为参数传递时,可能存在优化。至于这样的优化可能是什么,那就是"使用The Source,Luke"(tm)。
作为JDK中没有的String
实现的示例,您可以看到我的一个项目:largetext。请注意,除其他事项外,从CharSequence
uses a CharSequence
and not a String
as an argument生成Matcher
;自从Pattern
实现String
以来,传递CharSequence
作为参数就可以了。
答案 2 :(得分:0)
public StringBuffer(String str):构造一个初始化为指定字符串内容的字符串缓冲区。字符串缓冲区的初始容量是16加上字符串参数的长度。
public StringBuffer(CharSequence seq):构造一个字符串缓冲区,其中包含与指定CharSequence相同的字符。字符串缓冲区的初始容量是16加上CharSequence参数的长度。 如果指定的CharSequence的长度小于或等于零,则返回容量为16的空缓冲区。