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值是不同的。

原文地址:https://www.cnblogs.com/mjtabu/p/12702732.html