Durante mucho tiempo un valor igual para determinar si el uso de "==", encontró un problema
pública clase de demostración { públicas estáticas void main (String [] args) { largo m = 1 litro ; Larga n = 1L ; si (m == n) { System.out.println ( "m等于n" ); } Más { System.out.println ( "m不等于n" ); } } }
exportación
m es igual a n
pública clase de demostración { públicas estáticas void main (String [] args) { largo m = 128L ; Larga n = 128L ; si (m == n) { System.out.println ( "m等于n" ); } Más { System.out.println ( "m不等于n" ); } } }
exportación
m no es igual a n
Motivo:
Si el valor largo entre [-127,128], con "==" es una igualdad se determina si hay problema
Si no lo hace [-127,128] entre, un nuevo objeto será nuevo, no utilice "=="
pública estática largo valueOf ( larga l) { definitiva int offset = 128 ; si (l> = -128 && l <= 127) { // depositará volver LongCache.cache [( int ) l + desplazamiento]; } Devolver nueva largo (l); }
la solución
(1) el uso . LongValue ()
pública clase de demostración { públicas estáticas void main (String [] args) { largo m = 128L ; Larga n = 128L ; si (m.longValue () == n.longValue ()) { System.out.println ( "m等于n" ); } Más { System.out.println ( "m不等于n" ); } } }
exportación
m es igual a n
(2) usando .equals ()
pública clase de demostración { públicas estáticas void main (String [] args) { largo m = 128L ; Larga n = 128L ; si (m.equals (n)) { System.out.println ( "m等于n" ); } Más { System.out.println ( "m不等于n" ); } } }
exportación
m es igual a n
Y agregó:
La mejor solución para .eques ()
públicas boolean equals (Object obj) { si (obj instanceof Long) { retorno valor == ((Long) obj) .longValue (); } Devolver falsa ; }