| C114首页 | 新闻 | 技术 | 市场 | 会展 | 黄页 | 人物 | 3G | WiMax | LTE | FTTH | IPTV | IP通信 | NGN 通信人家园 | 通信人博客 | 通信商情网 | 通信人才网 | English |
|
java对String字符串对象的创建以及管理
( 2008/10/8 13:11 )
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章节。 对于Constant Pool,表的基本通用结构为: cp_info { tag是一个数字,用来表示存储的常量的类型,例如8表示String类型,5表示Long类型,info[]根据 类型码tag的不同会发生相应变化。 对于String类型,表的结构为: CONSTANT_String_info { tag固定为8,string_index是字符串内容信息,类型为:
tag固定为1,length为字符串的长度,bytes[length]为字符串的内容。 (以下代码在jdk6中编译) 为了详细理解Constant Pool的结构,我们参看一些代码:
由于"sss111"和"sss222"都是字符串常量,在编译期就已经创建好了存储在class文件中。 在编译后的class文件中会存在这2个常量的对应表示:
根据上面说的String常量结构,我们分析一下: 开始的08为CONSTANT_String_info结构中的tag,而11应该是它的相对引用,01为CONSTANT_Utf8_info的tag,06为对应字符串的长度,73 73 73 31 31 31为字符串对应的编码,接着分析,会发现后面的是对应"sss222"的存储结构。 经过上面分析,我们知道了11和13是两个字符串的相对引用,就可以修改class文件来修改打印的内容,把class文件中的00 6E 00 04 00 03 00 00 00 24 12 10 4C 12 12 4D改成00 6E 00 04 00 03 00 00 00 24 12 10 4C 12 10 4D,程序就会输出sss111 sss111,而不是和原程序一样输出sss111 sss222,因为我们把对"sss222"的相对引用12改成了对"sss111"的相对引用10。
|
·Java基础:常用的JDBC连接数据库方法大全 (12-3) ·Java程序开发过程中异常处理的特殊情况 (11-11) ·微软通过Java推广MSN工具栏 (11-11) ·Java学习过程中应该深入理解的一些重点 (10-29) ·初学者必读:将JAVA编译为EXE的几种方法 (10-29) 热议文章·广电总局张海涛:以CMMB为基础实现三网融合 (12-5) 评:广电提出基于CMMB的三网融合,从技术上看没有太多问题,但实际应用确需要争取电信... ·短信网内网间突破差价藩篱 贯彻就低不就高原则 (12-4) ·ICT业务发展良策 (12-4) ·关于CDMA发展危机的三大理由 (12-4) ·重组后的中国联通,何以对抗即将到来的混战 (12-3) ·传新联通鼓励员工内退,变相减人 (12-3) ·中国电信“三不新政” 不改号不换卡无需换终端 (12-2) ·诺基亚不是TD的救世主 (12-2) ·实时音频方案的演变与设计挑战 (12-5) ·摩托罗拉CDMA EV-DO解决方案 (12-5) ·EPON的光接入网解决方案 (12-5) ·Virtex-5 FPGA设计Gbps无线通信基站 (12-5) ·数字无线网络技术在实时无损检测系统中的应用 (12-5) ·开启大容量传送网的新纪元 (12-5) ·次贷危机下,LTE是个新谎言 (10-29) ·全球通信业面临金融危机冲击 对中国企业或利大于弊 (10-27) ·宽带市场不宜“非对称管制” (9-17) ·从校园竞争看重组后电信运营商竞争力对比 (9-8) |
|||||||||||||||
|