编程实现2+2=5 ?
2016-12-20 本文已影响12人
半亩荒地
看到这样一个题目,不知道如何入手。从网上看来别人如何实现的,互相交流。我们知道java中,string这种类型会使用共享池。且看下面两个例子:
(1)
Paste_Image.png
上面的代码最终输出的是true,按照Java对象的申请原则来说,这里应该是false才对。正是因为JVM在实现的时候,默认生成了一些 Integer对象的实例,当需要的实例是池子中已经存在的数值时,直接返回已经生成的对象的引用,不必新构造对象。这样可以极大减少实例数目和程序运行 性能。
(2)
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了。