
W Javie podobnie jak w innych językach wyróżniamy wiele typów danych mogących przechowywać zarówno liczby stało i zmiennoprzecinkowe, znaki, ciągi znaków, oraz typ logiczny. Java posiada ścisłą kontrolę typów, czyli mówiąc prościej każdy obiekt musi mieć określony typ.
Liczby stałoprzecinkowe to po prostu liczby całkowite, jednak wyróżniamy ich 4 rodzaje, ze względu na ilość zajmowanego miejsca.
byte - 1 bajt – zakres od -128 do 127
short - 2 bajty – zakres od -32 768 do 32 767
int - 4 bajty – zakres od -2 147 483 648 do 2 147 483 647
long - 8 bajtów – zakres od -2^63 do (2^63)-1 (posiadają przyrostek L, lub l)
Najbardziej uniwersalny jest typ int, jego zakres zazwyczaj wystarcza do wykonywania wszystkich operacji a jednocześnie nie zajmuje strasznie dużo miejsca (chociaż coraz rzadziej zwraca się na ten aspekt uwagę).
Dodatkowo istnieją klasy osłonowe, które są obiektowymi odpowiednikami typów prostych. Udostępniają one metody, dzięki którym wiele rutynowych czynności mamy zawsze pod ręką.
Java nie posiada też typu Unsigned (bez znaku), czego konsekwencją jest to, że przekraczając zakres danego typu przejdziemy na zakres ujemny.
Kolejne dwa typy reprezentują liczby zmiennoprzecinkowe i podobnie jak liczby całkowite różnią się zakresem oraz ilością zajmowanego miejsca, a także precyzją
float - 4 bajty – max ok 6-7 liczb po przecinku (posiadają przyrostek F, lub f)
double - 8 bajtów – max ok 15 cyfr po przecinku (posiadają przyrostek D, lub d)
Część całkowitą od ułamkowej oddzielamy kropką, a nie przecinkiem! Należy też pamiętać, że liczby zmiennoprzecinkowe nie nadają się do obliczeń finansowych, w których liczy się dokładność. Spowodowane jest to tym, że w systemie dwójkowym nie da się przedstawić wszystkich liczb. Z pomocą przychodzi tutaj specjalna klasa BigDecimal. Istnieje również klasa BigInteger, która jest odpowiednikiem dla liczb całkowitych i może reprezentować w zasadzie nieograniczone co do wielkości liczby.
Kolejnym typem jest char, czyli znak i służy do reprezentacji pojedynczych znaków kodu Unicode. Mogą być przedstawione w znakach pojedynczego cudzysłowu, przy pomocy kodu szesnastkowego, lub po prostu podając numer znaku Unicode w systemie dziesiętnym – przekonamy się o tym w kolejnej lekcji. W skrócie dozwolony jest zapis ‚a’, lub \u0000.
Istnieją również znaki specjalne, które muszą być poprzedzone znakiem backslash \ :
- \t – tab
- \n – nowa linia
- \r – powrót karetki
- \” – cudzysłów
- \’ – apostrof
- \\ – backslash
Ostatnim typem prostym jest boolean. Reprezentuje on tylko dwie wartości:
true - prawda
false - fałsz
Zazwyczaj jest wykorzystywany jako odpowiednia flaga, lub jako warunek pętli.
Poniżej zamieszczam przykład drukujący różne typy danych.
public class Typy{
public static void main(String[] args){
System.out.println('a'+'A');
System.out.println(1+2);
System.out.println(1.0+2.0);
System.out.println("cudzysłów \"");
System.out.println(true);
}
}Warto w nim zwrócić uwagę głównie na różne działanie operatora +(plus) w metodzie println(). Jak widać w przypadku znaków następuje dziwne zachowanie – wyświetla się liczba 162, zamiast oczekiwanego „aA„. Dlaczego się tak dzieje? Następuje automatyczne dopasowanie typu i typ char jest zamieniany na typ int. Omówimy to w dalszej części kursu.
Dodatkowo jak widać w przypadku liczb operator + powoduje dodanie liczb i wyświetlenie wyniku.
Od razu omówimy dodatkowy typ, który nie zalicza się już do typów prostych. Mowa tutaj o typie String. Zwróć uwagę na wielką literę, ponieważ jest to typ obiektowy to przyjmuje nazwę klasy z której się wywodzi, a jak wiemy klasy nazywamy z wielkiej litery.
No więc Stringi umieszczamy pomiędzy znakami cudzysłowu „text”. Służą one do przechowywania ciągów znaków i mają w zasadzie nieograniczoną pojemność. Więcej powiemy o nich przy omawianiu zmiennych w kolejnej lekcji.
Zadania do samodzielnego wykonania:
Przetestuj wyświetlanie innych znaków specjalnych, a także skompiluj i wykonaj powyższy przykład.
Spoiler:
Offline