background image

Przemysław Wionczyk

JAVA

Typy opakowujące

Typy opakowujące

i konwersja

i konwersja

1 / 10

background image

Przemysław Wionczyk

JAVA

Typy opakowujące

Ze względu na pełną obiektowość języka Java, w wielu miejscach 

wymagane   jest   przekazanie   wartości   jako   obiektu,   nawet   jeśli   jest   to 

prosta wartość typu podstawowego. Z tego powodu w języku Java mamy 

tak zwane typy opakowujące do typów podstawowych. Dodatkowo Java 

zapewnia nam automatyczną konwersję ze zmiennych.

2 / 10

background image

Przemysław Wionczyk

JAVA

Typy opakowujące

Mamy nastpujące typy opakowujące:

dla byte  mamy typ Byte,

dla short  mamy typ Short,

dla int 

mamy typ Integer,

dla long  mamy typ Long,

dla float  mamy typ Float,

dla double mamy typ Double,

dla char  mamy typ Character.

3 / 10

background image

Przemysław Wionczyk

JAVA

Typy opakowujące

Dodatkowo   Java   zapewnia   nam   automatyczną   konwersję   ze 

zmiennej typu podstawowego do odpowiadającego typu opakowującego 

oraz   odwrotnie.   Działa   to   jak   zwykłe   przypisanie   zmiennych 

identycznych typów.

long liczba1 = 10000;
Long liczba2 = new Long(10000);

Konwersja następuje automatycznie, więc można napisać:

liczba1 = liczba2;
liczba2 = liczba1;

4 / 10

background image

Przemysław Wionczyk

JAVA

Liczby wysokiej precyzji

Java mamy dwa dodatkowe typy obiektowe do przechowywania 

liczb dowolnej precyzji. Typ całkowity „BigInteger” przechowuje liczby 

całkowite   dowolnej   precyzji.   Deklarujemy   zmienne   tak   jak   obiekty 

podając przechowywaną liczbę jako parametr w postaci tekstu:

BigInteger a = new BigInteger("1000000000");
BigInteger b = new BigInteger("3333333333");
a = a.add(b);
System.out.println(a);

Jak widać ze zmiennej nie korzystamy poprzez zwykłe operatory, 

ale poprzez metody. Więcej można doczytać w dokumentacji klasy.

5 / 10

background image

Przemysław Wionczyk

JAVA

Liczby wysokiej precyzji

Typ   zmiennoprzecinkowy   „BigDecimal”   przechowuje   liczby 

zmiennoprzecinkowe dowolnej precyzji:

BigDecimal c = new BigDecimal("444.4444444444");
BigDecimal d = new BigDecimal("2222.2222222222");
c = c.add(d);
System.out.println(c);

Wyświetlona zostanie liczba 2666.6666666666.

Tu również ze zmiennej nie korzystamy poprzez zwykłe operatory, 

ale   poprzez   metody.   Więcej   można   doczytać   w   dokumentacji   klasy 

BigDecimal.

6 / 10

background image

Przemysław Wionczyk

JAVA

Konwersja

Gdy obliczamy wartość wyrażenia, czasem wynik tego wyrażenia, 

jest   bądź   może   być   (ze   względu   na   typy   zmiennych   występujących 

w wyrażeniu) typu którego nie chcemy. Na przykład:

Mnożąc dwie zmienne typu byte czyli przechowujące maksymalnie 

liczbę 127 możemy dostać maksymalnie liczbę 127

2

 która w typie byte 

się nie mieści. Kompilator uważa wtedy, że wynik jest liczbą typu short

ale  my   wiemy,  że  w naszym  programie  będą  tam  mnożone  mniejsze 

liczby i do przechowania wyniku można użyć zmiennej typu byte.

7 / 10

background image

Przemysław Wionczyk

JAVA

Konwersja (rzutowanie)

W takich sytuacjach musimy dokonać konwersji wyniku wyrażenia 

na inny typ. Robimy to pisząc przed wyrażeniem nazwę typu, na który 

rzutujemy, umieszczoną w nawiasie okrągłym:

byte a, b, wynik;
a = 13;
b = 12;
wynik = (byte) a * b;

8 / 10

background image

Przemysław Wionczyk

JAVA

Ćwiczenie 1

Znajdź   dokumentację   klas   Integer   i   Float   w   internecie   lub 

dokumentacji na dysku. Sprawdź jak wykonywać standardowe działania 

na liczbach tych typów.

Ćwiczenie 2

Napisz   program   wczyta   dwie   liczby   od   użytkownika,   jedną   do 

zmiennej  typu int, drugą do typu Integer. Wymnóż te liczby  i wynik 

zapisz w zmiennej typu int.

9 / 10

background image

Przemysław Wionczyk

JAVA

Ćwiczenie 3

Znajdź dokumentację klas BigInteger i BigDecimal w internecie 

lub   dokumentacji   na   dysku.   Sprawdź   jak   wykonywać   standardowe 

działania na liczbach tych typów.

Ćwiczenie 4

Napisz   program   który   zapyta   użytkownika   liczbę,   a   potem 

sprawdzi czy jest to liczba pierwsza. Użytkownik ma możliwość podania 

dowolnie dużej liczby, więc musisz użyć typu o wysokiej precyzji.

10 / 10