没有合适的资源?快使用搜索试试~ 我知道了~
面试中经常问道的常量池优化技术,Java中的常量值技术是为了方便快捷的创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果没有则创建一个,创建一个比引用一个要耗时),则在需要重复创建相等变量时节省了好多时间,常量池也就是一个内存空间,常量池存在于方法区中;
资源推荐
资源详情
资源评论


























1、什么是常量池技术
Java中的常量值技术是为了方便快捷的创建某些对象而出现的,当需要一个对象时,就
可以从池中取一个出来(如果没有则创建一个,创建一个比引用一个要耗时),则在需要重
复创建相等变量时节省了好多时间,常量池也就是一个内存空间,常量池存在于方法区中;
【关于常量池的修改问题】
常量池中存放的对象不能通过外界进行修改,所以Java中不允许对常量进行修改;
2、那些包装类实现了常量池
实现了常量池的包装类:Byte、Short、Character、Integer、Long、
Boolean(六个)
未实现常量池的包装类:
Float
、
Double
类型;
String引用类型:也实现了常量池;
3、常量池维护的范围
上述几种基本数据类型的包装类实现了常量池技术,但它们维护的常量仅仅是【-128-
127】这个范围的常量,如果出了这个范围,就会从堆中创建对象,不再从常量池中取;
4、常量池技术举例

①:i=i0,基本数据类型,存储在栈中,栈中的数据可以共享;
②:常量池技术
③:Java的数学运算都是在栈中进行的,Java自动对i2和i3进行拆箱操作转换为整形;
④:i4和i5是引用类型,在栈中存储指针,但是它们是new出来的,因此不再从常量池中寻
找数据,而是从堆中各自new一个对象,地址值肯定不一样;
⑤:加法运算,自动拆箱,同理3;
⑥:浮点型没有实现常量池技术,因此Doubled1=1.0相当于Doubled1=new
Double(1.0);是从堆上new出来的,d2同理,地址不一样;
注意:
(1)常量池的维护范围
上述几种基本数据类型的包装类实现了常量池技术,但它们维护的常量仅仅是【-128-
127】这个范围的常量,如果出了这个范围,就会从堆中创建对象,不再从常量池中取;
(看下面的源码)
(2)String特殊的常量池技术
String类型也实现了常量池技术,但稍微有点不同,String类型是先检测常量池中有没
有对应的字符串,如果有则取出来,如果没有,则把当前的添加进去;
(3)误区
只有基本数据类型和对应的包装类型进行比较的时候,才会发生自
动的拆箱进行比较,两个包装类型会遵从上述的比较规格,不会发生自
动的拆箱;
而equals,是Object类的方法,Object是所有对象的父类,如果要
比较的对象没有重新equals方法,就会调用Object的方法,此方法如
下:
剩余8页未读,继续阅读
资源评论


凉凉猫
- 粉丝: 17
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
