java字符串的常见问题.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java字符串的常见问题

Constant Pool常量池 的概念: 在讲到String的一些特殊情况时,总会提到String Pool或者Constant Pool,但是我想很多人都不太明白Constant Pool到底是个怎么样的东西,运行的时候存储在哪里,所以在这里先说一下Constant Pool的内容. String Pool是对应于在Constant Pool中存储String常量的区域.习惯称为String Pool,也有人称为String Constant Pool.好像没有正式的命名?? 在java编译好的class文件中,有个区域称为Constant Pool,他是一个由数组组成的表,类型 为cp_info constant_pool[],用来存储程序中使用的各种常量,包括Class / String / Integer 等各种基本Java数据类型,详情参见The Java Virtual Machine Specification 4 .4章节. 关于String类的说明 1 .String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的(immutable). 2 .String类有一个特殊的创建方法,就是使用 双引号来创建 .例如new String( i am )实际创建了2个String对象,一个是 i am 通过 双引号创建的,另一个是通过new创建的.只不过他们创建的时期不同,一个是编译期,一个是运行期 ! 3 .java对String类型重载了 + 操作符,可以直接使用 + 对两个字符串进行连接. 4 .运行期调用String类的intern()方法可以向String Pool中动态添加对象. String的创建方法一般有如下几种 1 .直接使用 引号创建. 2 .使用new String()创建. 3 .使用new String( someString )创建以及其他的一些重载构造函数创建. 4 .使用重载的字符串连接操作符 + 创建. 例1 ??? Java代码 /*? ? ????*?sss111是编译期常量,编译时已经能确定它的值,在编译 ? ????*?好的class文件中它已经在String?Pool中了,此语句会在 ? ????*?String?Pool中查找等于sss111的字符串(用equals(Object)方法确定), ? ????*?如果存在就把引用返回,付值给s1.不存在就会创建一个sss111放在 ? ????*?String?Pool中,然后把引用返回,付值给s1. ? ????*? ? ????*/? ?? ????String?s1?=??sss111??;? ?? ?? ????//?此语句同上? ?? ????String?s2?=??sss111??; ?? ?? ????/*? ? ????*?由于String?Pool只会维护一个值相同的String对象 ? ????*?上面2句得到的引用是String?Pool中同一个对象,所以 ? ????*?他们引用相等 ? ????*/? ?? ????System.out.println(s1?==?s2);?//?结果为true??? /* * sss111是编译期常量,编译时已经能确定它的值,在编译 * 好的class文件中它已经在String Pool中了,此语句会在 * String Pool中查找等于sss111的字符串(用equals(Object)方法确定), * 如果存在就把引用返回,付值给s1.不存在就会创建一个sss111放在 * String Pool中,然后把引用返回,付值给s1. * */ String s1 = sss111 ; // 此语句同上 String s2 = sss111 ; /* * 由于String Pool只会维护一个值相同的String对象 * 上面2句得到的引用是String Pool中同一个对象,所以 * 他们引用相等 */ System.out.println(s1 == s2); // 结果为true 例2 ??? Java代码 /*? ? ????*?在java中,使用new关键字会创建一个新对象,在本例中,不管在 ? ????*?String?Pool中是否已经有值相同的对象,都会创建了一个新的 ? ?

文档评论(0)

aicencen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档