- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
String对象总结
String对象总结
作者:zangxtString类是Java中很重要的一个类,在此总结一下这个类的特别之处。下面的相关资料翻译自《java语言规范》(第三版)和《java虚拟机规范》(第二版),有的直接摘引了原文。下面的代码都是用SUN jdk1.6 javac来编译。 String literal,这里将它翻译为字面常量,它由双引号包围的0个或多个字符组成,比如abc,Hello World等等。一个String字面常量总是引用相同的String实例,比如abc,abc两个常量引用的是同一个对象。 程序测试: package testPackage; class Test { ? ? ? ? public static void main(String[] args) { ? ? ? ? ? ? ? ? String hello = Hello, lo = lo; ? ? ? ? ? ? ? ? System.out.print((hello == Hello) + ); ? ? ? ? ? ? ? ? System.out.print((Other.hello == hello) + ); ? ? ? ? ? ? ? ? System.out.print((other.Other.hello == hello) + ); ? ? ? ? ? ? ? ? System.out.print((hello == (Hel+lo)) + ); ? ? ? ? ? ? ? ? System.out.print((hello == (Hel+lo)) + ); ? ? ? ? ? ? ? ? System.out.println(hello == (Hel+lo).intern()); ? ? ? ? } } class Other { static String hello = Hello; } 另一个包: package other; public class Other { static String hello = Hello; } 输出: true true true true false true 结论有六点: 1)? 同一个包下,同一个类中的相同的String字面常量表示对同一个String对象的引用。 2)? 同一个包下,不同的类中的相同的String字面常量表示对同一个String对象的引用。 3)? 不同包下,不同类中的相同String字面常量同样表示对同一个String对象的引用。 4)? 通过常量表达式计算的String,计算在编译时进行,并将它作为String字面常量对待。 5)? 通过连接操作得到的String(非常量表达式),连接操作是运行时进行的,会新创建对象,所以它们是不同的。 6)? 显式的对一个计算得到的String调用intern操作,得到的结果是已经存在的相同内容的String字面常量。 补充说明: 1)像这样的问题,String str = a+b+c+d; 运行这条语句会产生几个String对象?1个。参考上面第5条,通过常量表达式得到的String 是编译时计算的,因此执行这句话时只有abcd着一个String对象存在。 常量表达是的定义可以参考java语言规范。另例: ? ? ? final String str1 = a; ? ? ? String str2 = str1+b; 执行第二句话会有几个String对象产生?1个。因为str1是常量,所以str1+b也是常量表达式,在编译时计算。 ? ? 遇到这种问题时,不要说它依赖于具体的编译器或者虚拟机实现,因为这就是规范里有的。一般的说,java的编译器实现应该遵守《java语言规范》,而java虚拟机实现应该遵守《java虚拟机规范》。2)不要这样使用字符串: String str = new String(abc); ?参考文档中的说明: String public String(String original) ? ? 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本。 参数: original - 一个 String。 注意:无需使用此构造方法!!! 3)单独的说明第6点: String str = new String(abc); str = str.intern(); ? ? 当调用 intern 方法时,
您可能关注的文档
最近下载
- 计算机兴趣小组活动计划.docx VIP
- 人民币实际有效汇率波动对天津市贸易收支影响的实证研究的中期报告.docx VIP
- 中国石狮子PPT课件.pptx VIP
- 2025年全国高考(新课标)化学真题卷含答案解析 .pdf VIP
- 新部编小学语文五年级上册看拼音写词语.docx VIP
- 人教版(2025)必修第三册Unit 1 Festivals and celebrations Discovering Useful Structures 课件(共46张PPT)(含音频+视频).pptx VIP
- 年产2500吨高端氟材料项目环评报告表.pdf VIP
- 临床微生物室标准操作程序SOP.pdf VIP
- Boss Roland逻兰RC-600 乐句循环工作站RC-600 中文用户手册 说明书.pdf
- 2025年秋季湖北武汉市华中师范大学校友工作办公室学生助理招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解(5套).docx VIP
文档评论(0)