Cum să comparați corect două numere întregi în Java?

TL; Dr. Opinia mea este de a folosi un + Unario pentru a declanșa despachetarea într-unul din operanii atunci când verificați valori egale și pur și simplu utilizați operatorii matematici altfel. Logica urmează:

a fost deja menționată că comparația == pentru Integer este compararea identității, care În general, nu dorește un programator și că scopul este de a face o comparație a valorilor; Chiar și așa, am făcut o mică știință despre cum să fac această comparație în modul cel mai eficient, atât în ceea ce privește compactul codului, corecția și viteza.

am folosit metodele obișnuite:

și obținut acest cod după compilare și decompilare:

public boolean method1() { Integer var1 = Integer.valueOf( 7 ); Integer var2 = Integer.valueOf( 5 ); return var1.equals( var2 );}public boolean method2() { Integer var1 = Integer.valueOf( 7 ); Integer var2 = Integer.valueOf( 5 ); if ( var2.intValue() == var1.intValue() ) { return true; } else { return false; }}public boolean method3() { Integer var1 = Integer.valueOf( 7 ); Integer var2 = Integer.valueOf( 5 ); if ( var2.intValue() == var1.intValue() ) { return true; } else { return false; }}public boolean method4() { Integer var1 = Integer.valueOf( 7 ); Integer var2 = Integer.valueOf( 5 ); if ( var2.intValue() == var1.intValue() ) { return true; } else { return false; }}public boolean method5() { Integer var1 = Integer.valueOf( 7 ); Integer var2 = Integer.valueOf( 5 ); if ( var2 == var1 ) { return true; } else { return false; }}

cum puteți vedea cu ușurință, metoda 1 Apelați Integer.equals() (evident), metodele 2-4 au ca rezultat exact același cod, dezvoltați valorile prin intermediul .intValue() și Apoi, comparați-le direct, iar metoda 5 acționează pur și simplu o comparație de identitate, fiind o formă greșită de comparare a valorilor.

Având în vedere că (după cum sa menționat deja, JS) equals() suferă o supraîncărcare (trebuie să facă instanceof și o conversie non-dovedită), metodele 2-4 vor funcționa exact cu aceeași viteză, mai bine decât metoda 1 când Ei folosesc bucle strânse, deoarece Hotspot nu este probabil să optimizeze & iv = „b6e8f3f310”

.

este destul de similar cu altă comparație Operatori (de exemplu, < / >): Activați despachetarea, în timp ce utilizați nu va, dar de data aceasta, operația este extrem de optimizabilă de către HS Deoarece intValue() este doar o metodă getter (candidat principal pentru a fi optimizat în afara).

în mine Opinia, versiunea 4, care este utilizată rar, este cea mai concisă mod: toți dezvoltatorii C / Java cu experiență știu că avantajul de desfacere în majoritatea cazurilor este egal cu conversia la int DIV id = „9B9F6509B4″>

– Deși poate fi un micwtfmomento pentru unii (în principal cei care nu au folosit unuar plus în viața lor), ar putea spune că arată cea mai clar și ușor intenție: eșantioane La care dorim o valoare int al unuia dintre operanți, forțând și cealaltă valoare la Caxi. Este, de asemenea, indiscutabil mai asemănător comparației i1 == i2 utilizat în mod regulat pentru valorile primitive int.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *