Klassen Objekt, omslagsklasser, autoboxing/unboxing

Sven-Olof Nyström
OOP med Java våren -25
Informationsteknologi
Uppsala Universitet

Klassen Object

Exempel:

Object b = new Person(...);
Person p = (Person) b;

Studera gärna dokumentationen av Object i Java's API.

Omslagsklasser (Wrapper classes)

Betrakta denna deklaration:

Object b;

Med denna deklaration kan variabeln b bindas till alla datastrukturer i Java utom de som tillhör de primitiva datatyperna.

Anta att vi vill använda en primitiv datatyp där ett objekt förväntas.

Detta kan lösas med omslagsklasser. För varje primitiv datatyp finns en omslagsklass (wrapper class) definierad. Dessa har namn som börjar med stor bokstav:

Boolean, Character, Byte, Short, Integer, Long, Float, Double

Som vanligt finns dessa dokumenterade i Java's API. Ta en titt på någon av omslagsklasserna, till exempel klassen Integer.

Varje omslagsklass

Omslagsklasser, exempel

Skapa ett objekt i en omlagsklass:

Integer x = new Integer(42);

Givet ett objekt i en omslagsklass, ta fram ett värde av den motsvarande primitiva typen.

int y = x.intValue();

Alltså: om man har en generell datastruktur för att lagra Object kan man lagra de primitiva typerna med hjälp av omslagsklasser.

Autoboxing/unboxing

Automatisk inpackning och uppackning kom med Java 5.

Betrakta ett enkelt exempel:

int a = 123;
Object x = a;
int y = (Integer) x;

När variabeln x tilldelas allokeras ett objekt.

Autoboxing/unboxing, en varning

Om man använder omslagsklasser där primitiva datatyper hade räckt kan koden bli mycket ineffektiv.

Ett avskräckande exempel:

Integer s=0;
for (Integer i=0; i<10; i++) {
    s=s+i;
}

I varje iteration kommer vi att allokera och avallokera objekt.

Kom ihåg att "boolean" stavas med liten bokstav. (Vad händer om du stavar med stor bokstav?)