Under utvikling...
Generelt
I java opererer vi med seks primitive talltyper med forskjellige egenskaper, som brukes forskjellig deretter. Det er 4 heltalls-typer og 2 flyttalls-typer. Forskjellen på disse innad er antall bit tallet representeres ved, og nøyaktighet av de. De mest brukte typene er int og double. Det er viktig å merke seg at tallene man opererer med i java ikke er ideelle matematiske tall, men er representert med et begrenset antall bit, noe som kan føre med seg uønskede egenskaper.
...
Hva flyttall angår vil det vil sjeldent være grunn til å bruke noe annet enn double. Det som er viktig å bemerke seg er at et flyttall blir mindre og mindre nøyaktig desto større det blir.
Double tar også tre "merkelige" verdier som er gode greit å vite om:
NaN: "Not a number", NaN kan tildeles en double dersom vi prøver å utføre operasjoner som ikke lar seg gjøre. Se under, eksempel 1.
Infinity: "Uendelig", Infinity kan
er større enn alle tall, og følger noen enkle regler, eksempel 2.
-Infinity: "Negativ uendelig", -Infinity er mindre en alle tall, og følger de samme reglene som Infinity.
Eksempel 1
| Eksempel 2
| Kode for NaN | osv.. |
|
---|
Wrapper-klassene
De primitive talltypene i java har alle en "wrapper"-klasse. Disse klassene pakker inn den primitive talltypen, og gjør det mulig å representere den som et objekt. Dette gjøres ofte av kompilatoren og kalles da "autoboxing".
I java finnes det en Number-klasse som subklasses av de forskjellige wrapper-klassene. Number-klassen er abstrakt og et med de abstrakte metodene byteValue(), shortValue() ... doubleValue() som subklassene implementerer for å kunne konvertere til spesifikke talltyper. Et number-objekt vil alltid være en instans av en av subklassene.
Bildet er hentet fra Oracles sider.
Tilfeller når man kan komme til å ønske bruke wrapper-klassene:
- Dersom vi ønsker å sende en klasse som et argument
- Bruke konstanter klassen holder, som f.eks. MIN_VALUE/MAX_VALUE for den primitive typen
- Bruke klassemetoder for å konvertere mellom de forskjellige primitive typene
Under følger en nærmere beskrivelse av de forskjellige tallklassene
Byte
Klassen pakker inn et byte.
Datatypen byte kan brukes til å erstatte int for å spare minne i veldig store arrays, dersom minnesparsommelighet er viktig. Kan også brukes til å tydeliggjøre koden ved at verdiområdet er begrenset.
Byte-klassen har konstanter for MIN/MAX-verdier og ellers et sett med number-metoder for konvertering og sammenligning.
Når man utfører divisjon med et byte vil det utføres heltallsdivisjon.
Dersom man ikke ønsker heltallsdivisjonen kan dette lett løses ved å deklarere ett av tallene som en double (se under), eller representere tallet som et number-objekt og bruke metoden doubleValue() på objektet.
Short
Klassen pakker inn et byte
Short-klassen har konstanter for MIN/MAX-verdier og ellers et sett med number-metoder for konvertering og sammenligning.
Datatypen short kan brukes på samme måte som et byte, bare at et short vil bruke mer minneplass enn et byte.
Integer
Klassen pakker inn et int.
Integer-klassen har konstanter for MIN/MAX-verdier og ellers et sett med number-metoder for konvertering og sammenligning.
Når man ikke har noen spesielle krav til verdiområde eller minnesparsommelighet vil et int veldig ofte være det naturlige valget av datatype for et heltall. Et int vil som regel kunne ta alle nødvendige verdier et program trenger, og dersom man trenger enda større tall, kan man prøve et long.
Long
Klassen pakker inn et long.
Long-klassen har konstanter for MIN/MAX-verdier og ellers et sett med number-metoder for konvertering og sammenligning.
Man bruker en long som datatype når verdiområdet til et int ikke holder.
Float
Klassen pakker inn
Double
Heltalls-klassene har nyttige metoder og attributter og metoder som MAX_VALUE, MIN_VALUE, toString(), valueOf().
I tillegg implementerer alle tallklassene Comparable og dermed metoden compareTo(), slik at tall kan sorteres.
Man skal ikke bruke tallobjekter ukritisk og det er hovedsaklig tre tilfeller vi tar wrapperklassene til tall i bruk:
- når en må blande ulike talltyper eller talltyper og andre objekt-typer
- når en ønsker å bruke Collection-rammeverket sammen med tall (både Collection- og Map-subklasser)
- når en ønsker å skille mellom ikke-noe-tall (null) og en gyldig tall-verdi
Collections med tall
Når vi ønsker å lagre tall i et Collection-objekt må tallene være objekter.