我读了这个上一篇文章。任何人都可以说出两者之间的确切区别是什么CharSequence
和 String 是,除了以下事实:String实施CharSequence然后String
是一个字符序列?例如:
CharSequence obj = "hello";
String str = "hello";
System.out.println("output is : " + obj + " " + str);
当“hello”被分配给时会发生什么obj
并再次到str
?
一般差异
有几个类实现了CharSequence接口除了String。其中包括
-
StringBuilder用于可以修改的可变长度字符序列
-
CharBuffer用于可以修改的固定长度的低级字符序列
任何接受a的方法CharSequence
可以同样很好地处理所有这些。任何只接受一个的方法String
将需要转换。所以使用CharSequence
在您不关心内部结构的所有地方作为参数类型是谨慎的。但是你应该使用String
作为返回类型,如果你实际上返回一个String
,因为如果调用方法实际上确实需要一个返回值,则可以避免可能的转换String
.
另请注意,地图应使用String
作为键类型,而不是CharSequence
,因为地图键不得更改。换句话说,有时事物的本质是不可改变的。String
是必不可少的。
具体代码片段
至于您粘贴的代码:只需编译它,然后使用以下命令查看 JVM 字节码javap -v
。在那里你会注意到两者obj
and str
是对同一个常量对象的引用。作为一个String
是不可变的,这样的共享就可以了。
The +
的运算符String
被编译为各种调用StringBuilder.append
来电。所以它相当于
System.out.println(
(new StringBuilder())
.append("output is : ")
.append((Object)obj)
.append(" ")
.append(str)
.toString()
)
我必须承认我有点惊讶我的编译器javac 1.6.0_33
编译+ obj
using StringBuilder.append(Object)
代替StringBuilder.append(CharSequence)
。前者可能涉及调用toString()
对象的方法,而后者应该可以以更有效的方式实现。另一方面,String.toString()
简单地返回String
本身,所以那里几乎没有惩罚。所以StringBuilder.append(String)
通过大约一种方法调用可能会更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)