- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java中的常量池技术
java常量池技术 java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。
String类也是java中用得多的类,同样为了创建String对象的方便,也实现了常量池的技术。
测试代码如下:
public class Test{
public static void main(String[] args){
//s1,s2分别位于堆中不同空间
String s1=new String(hello);
String s2=new String(hello);
System.out.println(s1==s2);//输出false
//s3,s4位于池中同一空间
String s3=hello String s4=hello;
System.out.println(s3==s4);//输出true
}
}
用new String()创建的字符串不是常量,不能在编译期就确定,所以new String()创建的字符串不放入常量池中,他们有自己的地址空间。
String 对象(内存)的不变性机制会使修改String字符串时,产生大量的对象,因为每次改变字符串,都会生成一个新的String。 java 为了更有效的使用内存,常量池在编译期遇见String 字符串时,它会检查该池内是否已经存在相同的String 字符串,如果找到,就把新变量的引用指向现有的字符串对象,不创建任何新的String 常量对象,没找到再创建新的。所以对一个字符串对象的任何修改,都会产生一个新的字符串对象,原来的依然存在,等待垃圾回收。
代码:
String a = “test”;
String b = “test”;
String b = b+java;
a,b同时指向常量池中的常量值text,b=b+java之后,b原先指向一个常量,内容为test”,通过对b进行+java 操作后,b之前所指向的那个值没有改变,但此时b不指向原来那个变量值了,而指向了另一个String变量,内容为”text java“。原来那个变量还存在于内存之中,只是b这个变量不再指向它了。
八种基本类型的包装类和对象池 java中基本类型的包装类的大部分都实现了常量池技术,这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负责创建和管理大于127的这些类的对象。 一些对应的测试代码:
public class Test{ public static void main(String[] args){
//5种整形的包装类Byte,Short,Integer,Long,Character的对象,
//在值小于127时可以使用常量池
Integer i1=127;
Integer i2=127;
System.out.println(i1==i2); //输出true
//值大于127时,不会从常量池中取对象
Integer i3=128;
Integer i4=128;
System.out.println(i3==i4); //输出false
//Boolean类也实现了常量池技术
Boolean bool1=true;
Boolean bool2=true;
System.out.println(bool1==bool2); //输出true
//浮点类型的包装类没有实现常量池技术
Double d1=1.0;
Double d2=1.0;
System.out.println(d1==d2); //输出false
}
}
对Integer对象的代码补充
public static Integer valueOf(int i) {
final int offset = 128;
if (i = -128 i = 127) {
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
当你直接给一个Integ
您可能关注的文档
- (DCR2626)常用功能及其配置.doc
- (哈工程机械考研机械设计题库)第7章 齿轮传动.doc
- (摄像头的工作原理(获取视频数据))摄像头视频采集压缩及传输.doc
- 0000基于层次分析法的南通出口主导产业选择.doc
- 000000a0急诊感染的现状与对策.doc
- -开题报告 注水肉”快速检测系统研究.doc
- 000000b2HIV感染者围手术期脓毒症相关危险因素分析.doc
- 004-3种不锈钢多辊冷轧机的使用比较.doc
- 013-2009中国联通基于UICC平台的Java卡互操作性技术规范v10.doc
- (宋明玉)迈氏干涉仪教案.doc
- 2023年施工员之设备安装施工基础知识测试卷包括详细解答.docx
- 施工员之设备安装施工基础知识综合提升试卷附答案详解.docx
- 2022-2023年施工员之设备安装施工基础知识模拟题库包含答案.docx
- 2022-2023年施工员之设备安装施工基础知识考前冲刺模拟题库附有答案详解.docx
- 2023年施工员之设备安装施工基础知识测试卷含答案讲解.docx
- 2022-2023年施工员之设备安装施工基础知识练习试题包含答案.docx
- 施工员之设备安装施工基础知识考前冲刺训练试卷提供答案解析.docx
- 2023年施工员之设备安装施工基础知识检测卷含答案讲解.docx
- 2022-2023年施工员之设备安装施工基础知识考前冲刺模拟考试试卷提供答案解析.docx
- 施工员之设备安装施工基础知识考前冲刺训练试卷附答案详解.docx
最近下载
- ISO27001-2022信息安全管理体系内审全套记录表格.pdf VIP
- 六大纪律违纪风险点排查及对应防控措施.docx VIP
- 2022-2023学年天津市部分区高二(下)期末物理试卷(含解析).docx
- AQT9009-2015《生产安全事故应急演练评估规范》(AQT 9009-2015).pdf
- 预防艾滋病、梅毒和乙肝母婴传播登记及随访表.docx
- 园区保洁服务方案.docx
- DB-13 T 886-2007 森林害鼠预测预报与防治技术规程.pdf
- 关于新形势下党内政治生活的若干准则解读幻灯课件.pptx VIP
- SL101-2014水工钢闸门和启闭机安全检测技术规程.docx VIP
- 辽宁市政道路(桥梁)维修养护工程施工组织设计.doc
文档评论(0)