Java中CharSequence和String之间的确切区别

阿米斯:

我读了以前的这篇文章CharSequence除了String实现CharSequence和那String是一个字符序列的事实之外,谁能说出和String 之间的确切区别什么?例如:

CharSequence obj = "hello";
String str = "hello";
System.out.println("output is : " + obj + "  " + str);

当“你好”被分配到会发生什么obj,再而三str

最好的祝福 :

一般差异

CharSequence除了以外,还有几个类可以实现接口String其中有

  • StringBuilder 用于可变长度的字符序列,可以对其进行修改
  • CharBuffer 用于固定长度的低级字符序列,可以对其进行修改

任何接受a的方法CharSequence都可以在所有这些方法上同样有效地工作。任何仅接受a的方法都String将需要转换。因此CharSequence,在所有不关心内部结构的地方都应将其用作参数类型是谨慎的。但是,String如果实际返回a String则应将其用作返回类型,因为如果调用方法实际上确实需要a,则可以避免返回值的可能转换String

另请注意,地图不应String用作键类型,而不能CharSequence用作,因为地图键不得更改。换句话说,有时不变的本质String是必不可少的。

特定代码段

至于您粘贴的代码:只需对其进行编译,然后使用来查看JVM字节码javap -v在那里,您将注意到objstr都是对同一常量对象的引用。作为一个String不变的,这种共享是可以的。

+运算符String被编译为各种StringBuilder.append调用的调用。所以这相当于

System.out.println(
  (new StringBuilder())
  .append("output is : ")
  .append((Object)obj)
  .append(" ")
  .append(str)
  .toString()
)

我必须承认,我的编译器javac 1.6.0_33编译+ objusing StringBuilder.append(Object)而不是令我有些惊讶StringBuilder.append(CharSequence)前者可能涉及toString()对对象方法的调用,而后者应该以更有效的方式实现。另一方面,String.toString()只需返回String自身,因此几乎没有惩罚。因此,StringBuilder.append(String)通过一种方法调用可能会更有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.net.SocketTimeoutException中的“连接超时”和“连接失败”之间的确切区别是什么?

drag和dragstart事件类型(?)之间的确切区别

NSURLConnection和NSUrlSession之间的确切区别?

mul和mulu之间的确切区别

在 ResponseEntityExceptionHandler 中,handleExceptionInternal 和 handleException 之间的确切区别是什么?

DStream中的Spark Transform和map之间的确切区别是什么?

javascript中currentTarget属性和target属性之间的确切区别是什么

ExtJS中Ext.panel.Panel和Ext.Panel之间的确切区别

nodejs 中的签名 cookie 和未签名 cookie 之间的确切区别是什么?

在C和C ++中,作为函数参数的int ** a和int a [] []之间的确切区别是什么?

角度2:组件中私有属性和公共属性之间的确切区别是什么?

Django中的get_list_or_404和get_object_or_404之间的确切区别是什么?

.login和.cshrc文件之间的确切区别是什么?

适配器和代理模式之间的确切区别是什么?

“适配器”和“介体”模式之间的确切区别是什么?

“子shell”和“子进程”之间的确切区别是什么?

content-type:text / json和application / json之间的确切区别是什么?

awk和grep cut之间的确切区别是什么?

“ ExpectedConditions.visibilityOfElementLocated”和“ ExpectedConditions.presenceOfElementLocated”之间的确切区别是什么?

$ mycol,[[mycol]]和[,mycol,with = FALSE]的地址列之间的确切区别是什么?

在构造微积分上的“固定”和“自我”之间的确切区别是什么?

“终端”,“外壳”,“ tty”和“控制台”之间的确切区别是什么?

jsch ChannelExec和ChannelShell之间的确切区别是什么?

OnKeyListener和OnEditorActionListener之间的确切区别是什么?

线程入口和线程启动之间的确切区别是什么?

附加组件,插件和扩展之间的确切区别

Linux内核发行版和版本之间的确切区别是什么?

extrauser 和 useradd 之间的确切区别是什么

SessionLocaleResolver和FixedLocaleResolver之间的确切区别是什么