Przemysław Wionczyk
JAVA
Typy opakowujące
Typy opakowujące
i konwersja
i konwersja
1 / 10
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
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
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
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
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
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
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
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
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