编程实现2+2=5 ?

看到这样一个题目,不知道如何入手。从网上看来别人如何实现的,互相交流。我们知道java中,string这种类型会使用共享池。且看下面两个例子:

(1)


Paste_Image.png

上面的代码最终输出的是true,按照Java对象的申请原则来说,这里应该是false才对。正是因为JVM在实现的时候,默认生成了一些 Integer对象的实例,当需要的实例是池子中已经存在的数值时,直接返回已经生成的对象的引用,不必新构造对象。这样可以极大减少实例数目和程序运行 性能。
(2)

Paste_Image.png

Integer 对象,看源码后也会使用共享池缓存-128到127之间的整形数据。这里面使用一个叫cache数组,这个数组下标从0-255依次先存放的是-128到127之间256个数。cache【132】开始存放的是4,cahce【133】存的是5,在执行赋值操作array【132】=array【133】后,array【132】=5了。2 + 2 会去找原来的位置,即array【132】,此时值已经变成5了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,961评论 6 13
  • 1.在C/C++中实现本地方法 生成C/C++头文件之后,你就需要写头文件对应的本地方法。注意:所有的本地方法的第...
    JayQiu阅读 2,575评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,100评论 19 139
  • 今天第一次写日志 貌似很忙 他爸爸送两个孩子这种课外班 我在家里做饭打扫卫生 和好朋友聊聊美乐家独特的经营模...
    最爱的家阅读 347评论 0 0
  • 晚上看话剧音乐之声,这次看完最深的感触不是女主角的善良和孩子的可爱。竟是因为发现价值观和男主不合而潇洒离开的配角富...
    小熊猫在成长阅读 474评论 0 1

友情链接更多精彩内容