- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《javaString类详解
全面解析Java中的String数据类型开发者在线 B 更新时间:2007-09-03作者:qzg589 来源:ccidnet本文关键词: JAVAstring数据类型1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”kvill”; String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。 看例1: String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 结果为: true true 首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。 因 为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常 量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池 中”kvill”的一个引用。 所以我们得出s0==s1==s2; 用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。 看例2: String s0=”kvill”; String s1=new String(”kvill”); String s2=”kv” + new String(“ill”); System.out.println( s0==s1 ); System.out.println( s0==s2 ); System.out.println( s1==s2 ); 结果为: false false false 例 2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果了。 4. Sern(): 再 补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法; 当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没 有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例3就清楚了 例3: String s0= “kvill”; String s1=new String(”kvill”); String s2=new String(“kvill”); System.out.println( s0==s1 ); System.out.println( “**********” ); ern(); s2=ern(); //把常量池中“kvill”的引用赋给s2 System.out.println( s0==s1); System.out.println( s0==ern() ); System.out.println( s0==s2 ); 结果为: false ********** false //虽然执行了ern(),但它的返回值没有赋给s1 true //说明ern()返回的是常量池中”kvill”的引用 true 最后我再破除一个错误的理解: 有 人说,“使用Sern()方法则可以将一个String类的保存到一个全局String表中,如果具有相同值的Unicode字符串已 经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中“如果我把他说的这个全局的String表 理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的: 看例4: String s1=new String(kvill); String
您可能关注的文档
- 《GYK学习计划.doc
- 《2016党课第三章答案.doc
- 《H.PF01.V020712绩效考核管理制度.doc
- 《Gsoft17.0固定资产管理系统OK.doc
- 《H2SO4再生注意事项.doc
- 《GXSimulator6c的安装和使用方法.doc
- 《H265编码常见应用软件.docx
- 《GTR3.0.doc
- 《ha868电话机原理与维修方法.doc
- 《HAM新手对讲机入门指南.doc
- 2025年综合类-小学教育心理学-第十四章教学测量与评价历年真题摘选带答案(5卷单选100题合辑).docx
- 2025年综合类-高级测量放线工考试-中级测量放线工考试历年真题摘选带答案(5套合计100道单选).docx
- AI时代职业技能需求变化下的失配问题解析与应对之策.docx
- 2025年山西警官职业学院单招笔试英语试题库含答案解析(5套100道合辑-单选题).docx
- 2025年综合类-临床医学检验学主治医师-临床医学检验学主治医师-康复医学主治医师-康复医学主治医师.docx
- 乡土文化的传承与发展:乡村文化振兴之路.docx
- 2025年综合类-心理治疗(主管技师)-认知治疗历年真题摘选带答案(5卷100题).docx
- 先进复合材料在轨道交通轻量化中的应用研究.docx
- 2025年综合类-资产评估-第二节资产评估的假设与原则历年真题摘选带答案(5卷-选择题).docx
- 2025年综合类-药理学-神经系统药物历年真题摘选带答案(5卷单选100题合辑).docx
文档评论(0)