zoukankan      html  css  js  c++  java
  • i++后的哈希码会变的原因

    i++后的哈希码会变的原因

    Synchronized同步锁的是同一个对象,如果对象发生改变,则会失去效果

    先上代码:

    public class IntegerHashCode {
        public static void main(String[] args) {
            Integer integer = 1;
            //System.identityHashCode:返回原生的hashCode值,不管Object对象是被重写;空引用的哈希代码为零
            System.out.println("++前的hashCode值---"+System.identityHashCode(integer));
            integer++;
            System.out.println("++后的hashCode值---"+System.identityHashCode(integer));
    
        }
    }

    运行结果:

     结果发现 ++前 和 ++后 的hashCode值并不相同,这是为什么呢?

    我们一步一步找原因:

    1.反编译此java文件

    可以发现:

    integer++  是这样的  Integer integer1 = this.num, integer2 = this.num = Integer.valueOf(this.num.intValue() + 1);

    2. 查看 Integer.valueOf() 的源代码

     这时发现,它是重新 new 出一个新的 Integer,这样的话,每 ++ 一次,那么就会产生一个新的对象,新的对象的hashCode值是不同的。

  • 相关阅读:
    全网数据库大全
    Docker最全教程
    枚举策略
    POJ 1012
    阿里云轻量应用服务器入门(二)
    阿里云轻量应用服务器入门(一)
    云服务器ECS
    Codeforces 768B B. Code For 1
    链剖&LCT总结
    O(1) 查询gcd
  • 原文地址:https://www.cnblogs.com/mjtabu/p/12702732.html
Copyright © 2011-2022 走看看