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.