首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuffer(String str)和StringBuffer(CharSequence chars)的区别

StringBuffer(String str)和StringBuffer(CharSequence chars)的区别
EN

Stack Overflow用户
提问于 2014-11-27 17:08:48
回答 3查看 198关注 0票数 4

1.我对这两种情况感到困惑,它们是否有不同的功能,如果是的话,又如何?

代码语言:javascript
复制
StringBuffer(CharSequence chars) 

代码语言:javascript
复制
StringBuffer(String str)
  1. 字符串和CharSequence(特别是功能)之间的基本区别是什么?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-27 17:31:41

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

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

CharSequence的javadoc中可以看到,JDK中没有多少类真正实现了这个接口。

至于为什么两个构造函数,StringBuffer可以追溯到Java1.0,而CharSequence只出现在1.4中;但是,也存在这样的情况:StringBuilder (实际上应该使用StringBuilder而不是StringBuffer)有两个构造函数(一个以CharSequence作为参数,另一个以String作为参数),因此在将String作为参数传递时可能隐含了一些优化。至于这样的优化可以是什么,嗯,这是一个“使用源,卢克”(Tm)的例子。

例如,作为不在JDK中的CharSequence实现的一个例子,您可以看到我的一个项目:大文本。注意,除其他外,从Pattern 作为一个论据生成一个String;由于String实现了CharSequence,所以传递String作为参数是有效的。

票数 4
EN

Stack Overflow用户

发布于 2014-11-27 17:26:06

CharSequence是一个接口,所以不能直接实例化它。String是一个实现CharSequence接口的具体类。StringBuffer还实现了CharSequence接口。

至于为什么StringBuffer有两个构造函数(一个接受String,另一个接受CharSequence ),这几乎可以肯定是因为(按照Javadoc中的Since行) CharSequence是在JavaV1.4之前添加的,而StringBuffer (和String)是在Java1.0中添加的。

票数 5
EN

Stack Overflow用户

发布于 2014-11-27 17:28:42

public StringBuffer(String ) :构造一个初始化为指定字符串内容的字符串缓冲区。字符串缓冲区的初始容量为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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27175875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档