参见英文答案 > CharSequence VS String in Java? 9个
> Why StringBuilder when there is String? 9个
> Choosing between CharSequence and String for an API 1个
我读了这个previous post.可以有人说CharSequence和String之间的确切区别是什么,除了String
实现CharSequence
并且String是一个字符序列的事实?例如:
CharSequence obj = "hello";
String str = "hello";
System.out.println("output is : " + obj + " " + str);
将“hello”分配给obj并再次分配给str时会发生什么?
解决方法:
一般差异
除了String
之外,还有几个类实现CharSequence
接口.其中有
> StringBuilder
用于可修改的可变长度字符序列
> CharBuffer
用于可修改的固定长度低级字符序列
接受CharSequence的任何方法都可以在所有这些方面同样良好地运行.任何只接受String的方法都需要转换.所以在所有你不关心内部的地方使用CharSequence作为参数类型是谨慎的.但是,如果实际返回String,则应该使用String作为返回类型,因为如果调用方法实际上需要String,则可以避免返回值的可能转换.
另请注意,映射应使用String作为键类型,而不是CharSequence,因为映射键不能更改.换句话说,有时String的不可变性质是必不可少的.
具体代码段
至于你粘贴的代码:只需编译它,然后使用javap -v查看JVM字节码.在那里你会注意到obj和str都是对同一个常量对象的引用.由于String是不可变的,这种共享是可以的.
String的运算符被编译为各种StringBuilder.append调用的调用.所以它相当于
System.out.println(
(new StringBuilder())
.append("output is : ")
.append((Object)obj)
.append(" ")
.append(str)
.toString()
)
我必须承认我有点惊讶我的编译器javac 1.6.0_33使用StringBuilder.append(Object)而不是StringBuilder.append(CharSequence)编译obj.前者可能涉及对对象的toString()方法的调用,而后者应该以更有效的方式进行.另一方面,String.toString()只返回String本身,因此没有什么惩罚.因此,通过大约一个方法调用,StringBuilder.append(String)可能更有效.
标签:java,string,charsequence 来源: https://codeday.me/bug/20190917/1809648.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。