Java 8 Math Nye metoder

1. Introduksjon

Vanligvis, når vi tenker på de nye funksjonene som fulgte med versjon 8 av Java, er funksjonell programmering og lambda-uttrykk de første tingene vi tenker på.

Likevel, foruten de store funksjonene, er det andre, kanskje med mindre innvirkning, men også interessante og mange ganger ikke veldig kjent eller til og med dekket av noen anmeldelse.

I denne opplæringen vil vi oppregne og gi et lite eksempel på hver av de nye metodene som er lagt til en av kjerneklassene i språket: java.lang.Math.

2. Ny *nøyaktig() Metoder

For det første har vi en gruppe nye metoder som utvider noen av de eksisterende og vanligste aritmetiske operasjonene.

Som vi får se, er de ganske selvforklarende, siden de har nøyaktig samme funksjonalitet enn metodene de kommer fra, men med i tillegg til å kaste et unntak i tilfelle, overskrider den resulterende verdien maks- eller minverdiene for deres typer.

Vi kan bruke disse metodene med begge deler heltall og lengter som parametere.

2.1. addExact ()

Legger til de to parametrene, kaster en Aritmetisk unntak i tilfelle overløp (som gjelder for alle *Nøyaktig() metoder) av tillegget:

Math.addExact (100, 50); // returnerer 150 Math.addExact (Integer.MAX_VALUE, 1); // kaster ArithmeticException

2.2. substractExact ()

Trekker verdien av den andre parameteren fra den første, og kaster en Aritmetisk unntak i tilfelle overløp av subtraksjonen:

Math.subtractExact (100, 50); // returnerer 50 Math.subtractExact (Long.MIN_VALUE, 1); // kaster ArithmeticException

2.3. inkrementExact ()

Øker parameteren med en, og kaster en Aritmetisk unntak i tilfelle overløp:

Math.incrementExact (100); // returnerer 101 Math.incrementExact (Integer.MAX_VALUE); // kaster ArithmeticException

2.4. decrementExact ()

Reduserer parameteren med en, og kaster en Aritmetisk unntak i tilfelle overløp:

Math.decrementExact (100); // returnerer 99 Math.decrementExact (Long.MIN_VALUE); // kaster ArithmeticException

2.5. multipliser Eksakt ()

Multipliser de to parametrene, og kast en Aritmetisk unntak i tilfelle overløp av produktet:

Math.multiplyExact (100, 5); // returnerer 500 Math.multiplyExact (Long.MAX_VALUE, 2); // kaster ArithmeticException

2.6. negateExact ()

Endrer parameterets tegn, kaster et Aritmetisk unntak i tilfelle overløp.

I dette tilfellet må vi tenke på den interne representasjonen av verdien i minnet for å forstå hvorfor det er et overløp, som ikke er så intuitivt som resten av de "nøyaktige" metodene:

Math.negateExact (100); // returnerer -100 Math.negateExact (Integer.MIN_VALUE); // kaster ArithmeticException

Det andre eksemplet krever en forklaring, da det ikke er åpenbart: Overløpet skyldes Heltall.MIN_VALUE å være −2.147.483.648, og på den andre siden Heltall.MAX_VALUE blir 2.147.483.647 slik at den returnerte verdien ikke passer inn i en Heltall av en enhet.

3. Andre metoder

3.1. floorDiv ()

Deler den første parameteren med den andre, og utfører deretter a gulv() operasjon over resultatet, returnerer Heltall som er mindre eller lik kvotienten:

Math.floorDiv (7, 2)); // returnerer 3 

Den nøyaktige kvoten er 3,5 så etasje (3.5) == 3.

La oss se på et annet eksempel:

Math.floorDiv (-7, 2)); // returnerer -4 

Den nøyaktige kvotienten er -3,5 så etasje (-3,5) == -4.

3.2. modDiv ()

Denne ligner på den forrige metoden floorDiv (), men bruker gulv() operasjon over modul eller resten av inndelingen i stedet for kvotienten:

Math.modDiv (5, 3)); // returnerer 2 

Som vi kan se, er modDiv () for to positive tall er det samme som% operator. La oss se på et annet eksempel:

Math.modDiv (-5, 3)); // returnerer 1 

Den returnerer 1 og ikke 2 fordi floorDiv (-5, 3) er -2 og ikke -1.

3.3. neste ned ()

Returnerer den umiddelbart lavere verdien av parameteren (støtter flyte eller dobbelt parametere):

flyte f = Math.nextDown (3); // returnerer 2.9999998 dobbel d = Math.nextDown (3); // returnerer 2.999999761581421

4. Konklusjon

I denne artikkelen har vi kort beskrevet funksjonaliteten til alle de nye metodene som er lagt til i klassen java.lang.Math i versjon 8 av Java-plattformen og har også sett noen eksempler på hvordan du bruker dem.

Som alltid er hele kildekoden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found