|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net网页编程并驾齐驱的
ConstantPool常量池的观点:
在讲到String的一些特别情形时,总会提到StringPool大概ConstantPool,可是我想良多人都不太分明ConstantPool究竟是个怎样的工具,运转的时分存储在那里,以是在这里先说一下ConstantPool的内容。
StringPool是对应于在ConstantPool中存储String常量的地区.习气称为StringPool,也有人称为StringConstantPool.仿佛没有正式的定名。
在java编译好的class文件中,有个地区称为ConstantPool,他是一个由数组构成的表,范例为cp_infoconstant_pool[],用来存储程序中利用的各类常量,包含Class/String/Integer等各类基础Java数据范例。
关于ConstantPool,表的基础通用布局为:
cp_info{
u1tag;
u1info[];
}
tag是一个数字,用来暗示存储的常量的范例,比方8暗示String范例,5暗示Long范例,info[]依据
范例码tag的分歧会产生响应变更。
关于String范例,表的布局为:
CONSTANT_String_info{
u1tag;
u2string_index;
}
tag流动为8,string_index是字符串内容信息,范例为:
CONSTANT_Utf8_info{
u1tag;
u2length;
u1bytes[length];
}
tag流动为1,length为字符串的长度,bytes[length]为字符串的内容。
(以下代码在jdk6中编译)
为了具体了解ConstantPool的布局,我们参看一些代码:
Strings1="sss111";
Strings2="sss222";
System.out.println(s1+""+s2);
因为"sss111"和"sss222"都是字符串常量,在编译期就已创立好了存储在class文件中。
在编译后的class文件中会存在这2个常量的对应暗示:
08001101000673737331313108001301;......sss111....
0006737373323232 ;..sss222
<p>
不得不提一下的是:.net网页编程是看到java红,而开发出来的工具。 |
|