La razón por la cual el código hash después de i ++ cambiará

La razón por la cual el código hash después de i ++ cambiará

El bloqueo de sincronización sincronizada es el mismo objeto, si el objeto cambia, perderá su efecto

Primer código:

public  class IntegerHashCode {
     public  static  void main (String [] args) { 
        Integer integer = 1 ;
         // System.identityHashCode: devuelve el valor original de hashCode, independientemente de si el objeto Object se reescribe; el código hash de la referencia nula es cero 
        Sistema. out.println ("valor de hashCode antes de" ++ --- "+ System.identityHashCode (entero)); 
        integer ++ ; 
        System.out.println ( " valor de hashCode después de ++ --- "+ System.identityHashCode ( entero)); 

    } 
}

Resultado de la operación:

 Resulta que los valores de hashCode antes de ++ y después de ++ no son los mismos, ¿por qué?

Busquemos la razón paso a paso:

1. Descompile este archivo java

Se puede encontrar:

entero ++ es así Entero entero1 = this.num, entero2 = this.num = Integer.valueOf (this.num.intValue () + 1);

2. Ver el código fuente de Integer.valueOf ()

 En este momento, se descubrió que era un nuevo entero. En este caso, cada ++ una vez, se generará un nuevo objeto y el valor de hashCode del nuevo objeto es diferente.

Supongo que te gusta

Origin www.cnblogs.com/mjtabu/p/12702732.html
Recomendado
Clasificación