编程实现2+2=5 ?

作者: 半亩荒地 | 来源:发表于2016-12-20 22:51 被阅读12次

    看到这样一个题目,不知道如何入手。从网上看来别人如何实现的,互相交流。我们知道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了。

    相关文章

      网友评论

      • af4e8a35bc89:这个程序为什么不去直接计算2加2等于4,而是去找a[132] ?
        af4e8a35bc89:@往之不谏2016 嗯
        半亩荒地:@江湖丽日 这个2+2 得到的是引用,还是指向之前未修改时存放值为4的位置,即指向数组下标为132的位置,指向的位置没有改变,只是里面的值被修改了。
      • 半亩荒地:缓存无处不在

      本文标题:编程实现2+2=5 ?

      本文链接:https://www.haomeiwen.com/subject/ikvfvttx.html