1. Lista typów pierwotnych
Java ma 8 podstawowych typów pierwotnych. Nazywa się je prymitywnymi, ponieważ wartości tych typów nie są obiektami i są przechowywane bezpośrednio w zmiennych.
Oto tabela zawierająca podsumowanie tych typów:
Typ | Rozmiar, bajty |
Zakres wartości | Domyślna wartość | Opis |
---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Najmniejsza liczba całkowita to jeden bajt |
short |
2 | -32,768 .. 32,767 | 0 |
Krótka liczba całkowita, dwa bajty |
int |
4 | -2*109 .. 2* 109 | 0 |
Liczba całkowita, 4 bajty |
long |
8 | -9*10 18 .. 9*10 18 | 0L |
Długa liczba całkowita, 8 bajtów |
float |
4 | -10 38 .. 10 38 | 0.0f |
Ułamkowy, 4 bajty |
double |
8 | -10 308 .. 10 308 | 0.0d |
Ułamkowa, podwójna długość, 8 bajtów |
boolean |
1 | true ,false |
false |
Typ logiczny (tylko true & false ) |
char |
2 | 0..65.535 | '\u0000' |
Znaki, 2 bajty, wszystkie większe niż 0 |
Nawiasem mówiąc, ważny niuans. Jeśli zadeklarujesz zmienną klasową (pole klasy) lub statyczną zmienną klasową i nie przypiszesz do niej żadnej wartości, zostanie ona zainicjowana wartością domyślną . Lista takich wartości znajduje się w tabeli.
Lokalne zmienne metody nie mają wartości domyślnych, a jeśli nie przypiszesz żadnej wartości do takiej zmiennej, zostanie ona uznana za niezainicjowaną i nie będzie można użyć jej wartości.
Wróćmy jednak do typów pierwotnych i przyjrzyjmy się im bardziej szczegółowo.
2. Typy całkowite
W Javie są już 4 typy liczb całkowitych: byte
, short
, int
i long
. Różnią się wielkością i zakresem wartości, które mogą przechowywać.
Typint
Najczęściej używanym typem jest int
. Jego nazwa pochodzi od Int eger (całość). Wszystkie literały całkowite w kodzie mają typ int
(chyba że liczba kończy się na L
, F
lub D
).
Zmienne tego typu mogą przyjmować wartości od -2,147,483,648
do +2,147,483,647
.
To całkiem sporo i wystarczy na prawie każdą okazję. Prawie wszystkie funkcje, które zwracają liczbę, zwracają liczbę typu int
.
Przykłady:
Kod | Wyjaśnienie |
---|---|
|
Metoda length() zwraca długość łańcucha |
|
Pole length zawiera długość tablicy. |
Typshort
Typ short
bierze swoją nazwę od short int
. Nazywana jest również krótką liczbą całkowitą . W przeciwieństwie do type int
, ma tylko dwa bajty długości i może mieć zakres od -32,768
do +32,767
.
Oznacza to, że nie możesz nawet zapisać w nim miliona. Nawet 50 tys. Jest to najczęściej używany typ całkowity w Javie. Jest używany głównie, gdy chcą zaoszczędzić na pamięci.
Załóżmy, że masz sytuację, w której z góry wiadomo, że wartości, z którymi pracujesz, nie przekraczają 30 tysięcy, a takich wartości są miliony.
Na przykład piszesz aplikację, która przetwarza obrazy w ultrawysokiej rozdzielczości: jest bit 10
na kolor. I masz milion kropek na obrazku. I tutaj już odgrywa rolę, używasz typu int
lub short
.
Typlong
Ten typ bierze swoją nazwę od long int
- jest również nazywany długą liczbą całkowitą . W przeciwieństwie do type int
ma po prostu gigantyczny zakres wartości: od do -9*1018
+9*1018
Dlaczego nie jest to podstawowy typ całkowity?
Rzecz w tym, że Java pojawiła się w połowie lat 90., kiedy większość komputerów była 32-bitowa. A to oznaczało, że wszystkie procesory zostały wyostrzone do pracy z liczbami z 32 bitów. Procesory wiedziały już, jak pracować z 64-bitowymi liczbami całkowitymi, ale operacje na nich były wolniejsze.
Dlatego programiści rozsądnie postanowili stworzyć standardowy typ liczb całkowitych type int
, ale long
używać tego typu tylko wtedy, gdy naprawdę nie można się bez niego obejść.
Typbyte
Jest to najmniejsza liczba całkowita w Javie, ale zdecydowanie nie jest najmniej używana. Jego nazwa jest taka sama jak słowo byte
- minimalna adresowalna komórka pamięci w Javie.
Rozmiar prawidłowych wartości typu byte
nie jest tak duży: od -128
do +127
. Ale to nie jest jego siła. Ten typ byte
jest najczęściej używany, gdy trzeba przechowywać duży blok anonimowych danych w pamięci. Tablica typu byte
jest po prostu idealna do tego celu.
Na przykład musisz gdzieś skopiować plik.
Nie musisz przetwarzać zawartości pliku: wystarczy utworzyć lokalizację pamięci (bufor), skopiować do niej zawartość pliku, a następnie zapisać te dane z bufora do innego pliku. Tablica typu byte
jest tym, czego potrzebujesz do tych celów.
Co więcej, w zmiennej typu tablicowego przechowywane jest tylko odniesienie do obszaru pamięci. Podczas przekazywania wartości tej zmiennej do jakiejś metody, tylko adres w pamięci zostanie przeniesiony, a sam blok pamięci nie zostanie skopiowany.
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // читаем данные из plik в буфер
destFile.write(buffer, 0, size); // записываем данные из буфера в файл
// прекращаем копирование, если буфер заполнен не w pełni
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3. Prawdziwe typy
Istnieją również dwa typy rzeczywiste wśród typów pierwotnych. Chociaż nie jest to do końca poprawna nazwa. Oficjalnie nazywa się je liczbami zmiennoprzecinkowymi . Nazwa pochodzi od standardu, w którym kropka (zamiast przecinka) oddziela część całkowitą od części ułamkowej liczby.
Każdy kraj ma własne standardy pisania liczb (nagle!).
Wielu z nas jest przyzwyczajonych do wpisywania kropek w celu oddzielenia tysięcy i przecinka w celu oddzielenia części ułamkowej: na przykład миллион целых и 153 тысячных
zapisalibyśmy tak 1.000.000,153
. Ale w USA, gdzie mieszkali twórcy Javy, przyjęto inny standard:1,000,000.153
Java ma dwa prymitywne typy zmiennoprzecinkowe: double
i float
.
Jak powiedzieliśmy wcześniej, te typy są wewnętrznie uporządkowane w określony sposób: w rzeczywistości wewnątrz każdej zmiennej tego typu nie ma jednej liczby, ale dwie:
Na przykład liczbę ułamkową 987654.321
można przedstawić jako . Dlatego w pamięci będzie reprezentowany jako dwie liczby ( mantysa to znacząca część liczby) i ( wykładnik to potęga dziesięciu)0.987654321*106
987654321
6
Typfloat
Sama nazwa typu float
pochodzi od liczby zmiennoprzecinkowej . Rozmiar tego typu jest dość mały - tylko 4 bajty (32 bity), ale może przechowywać wartości od do . 24 bity są podane dla mantysy, 8 bitów dla wykładnika. Ten typ jest w stanie przechowywać tylko 8 cyfr znaczących.-3.4*1038
3.4*1038
Takie podejście pozwala przechowywać znacznie większe liczby niż int
przy użyciu tych samych 4 bajtów. Ale robiąc to, poświęcamy dokładność. Część pamięci zajmuje przechowywanie mantysy, więc takie liczby przechowują tylko 6-7 miejsc po przecinku, reszta jest odrzucana.
Przykład:
Kod | Wartość zmienna |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
Jak widać, główną wadą tego typu jest bardzo mała liczba cyfr znaczących i utrata precyzji już przy ósmej cyfrze. Dlatego typ ten float
nie jest zbyt popularny wśród programistów Javy.
Typdouble
Typ double
jest standardowym typem zmiennoprzecinkowym. Jego nazwa pochodzi od podwójnego zmiennoprzecinkowego . Nazywana jest również liczbą zmiennoprzecinkową podwójnej precyzji . Wszystkie literały rzeczywiste są domyślnie typu double
.
Ten typ zajmuje 8 bajtów pamięci (64 bity) i może przechowywać wartości od do . Ważnym punktem jest to, że 53 bity są przeznaczone na jego mantysę, a pozostałe 11 bitów na wykładnik.-1.7*10308
1.7*10308
Pozwala to na przechowywanie 15-17 cyfr znaczących.
Przykład:
Kod | Wartość zmienna |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Taka precyzja, zwłaszcza w porównaniu z typem float
, jest decydująca: 99% wszystkich operacji na liczbach rzeczywistych jest wykonywanych na typie double
.
Na wykładnik przydzielony jest bit 11
, który pozwala zapisać potęgę dziesięciu od -323
do +308
(potęga dwójki to liczba od -1024
do +1023
). Typ double
może łatwo przechowywać liczbę ze setką zer po przecinku:
Kod | Wartość zmienna |
---|---|
|
600.0 |
4. Nieskończoność
Liczby zmiennoprzecinkowe mają jeszcze jedną interesującą cechę: pozwalają przechowywać specjalną wartość reprezentującą nieskończoność . Co więcej, może istnieć dodatnia nieskończoność i ujemna nieskończoność .
Przykłady:
Kod | Notatka |
---|---|
|
|
|
|
|
|
Jeśli pomnożysz nieskończoność przez liczbę, otrzymasz nieskończoność. Jeśli dodasz liczbę do nieskończoności, otrzymasz nieskończoność. Bardzo komfortowo.
To nie jest liczba ( NaN
)
Wszelkie operacje na nieskończoności dają nieskończoność. Ogólnie tak, ale nie wszystkie.
Liczby zmiennoprzecinkowe mogą przechowywać inną specjalną wartość - NaN
. Jest to skrót od Not a Number ( not a number).
W matematyce, jeśli dzielisz nieskończoność przez nieskończoność, musi istnieć niepewność.
Cóż, w Javie, jeśli podzielisz nieskończoność przez nieskończoność, będzie to NaN
.
Przykłady:
Kod | Notatka |
---|---|
|
|
|
|
|
|
Każda operacja z NaN
daje NaN
.
5. Wpiszchar
Wśród prymitywnych typów w Javie na szczególną uwagę zasługuje jeszcze jeden — typ char
. Jego nazwa pochodzi od słowa Char aktor , a sam typ służy do przechowywania znaków.
Ale znaki są dokładnie tym, z czego składają się ciągi: każdy ciąg zawiera tablicę znaków.
Ale jeszcze bardziej interesujący jest fakt, że typ char
jest również typem numerycznym ! Można powiedzieć, typ dwufunkcyjny.
Chodzi o to, że w rzeczywistości typ char
nie przechowuje znaków, ale kody znaków z kodowania Unicode. Każdemu znakowi odpowiada liczba - numeryczny kod znaku.
Każda zmienna typu char
zajmuje dwa bajty w pamięci (podobnie jak type short
). Ale w przeciwieństwie do typu short
, typ całkowity char
jest bez znaku i może przechowywać wartości od 0
do 65,535
.
Typ char
jest typem hybrydowym. Jego wartości można interpretować zarówno jako liczby (można je dodawać i mnożyć), jak i jako symbole. Stało się tak, ponieważ chociaż symbole mają reprezentację wizualną, dla komputera są to przede wszystkim liczby. I znacznie wygodniej jest z nimi pracować, jak z liczbami.
Unikod
Unicode to specjalna tabela (kodowanie), która zawiera wszystkie znaki na świecie. A każdy symbol ma swój własny numer. Wygląda to mniej więcej tak:
Istnieje wiele sposobów przypisania wartości do zmiennej typu char
.
Kod | Opis |
---|---|
|
Zmienna а będzie zawierać literę łacińską А . |
|
Zmienna а będzie zawierać literę łacińską А . Jej kod to tylko 65 . |
|
Zmienna а będzie zawierać literę łacińską А . Jej kod jest dokładnie 65 równy 41 w systemie szesnastkowym. |
|
Zmienna а będzie zawierać literę łacińską А . Jej kod jest dokładnie 65 równy 41 w systemie szesnastkowym. Dwa dodatkowe zera niczego nie zmieniają. |
|
Zmienna а będzie zawierać literę łacińską А . Inny sposób ustawienia znaku według jego kodu. |
Najczęściej po prostu oznaczają znak w cudzysłowie (jak w pierwszym wierszu tabeli). Chociaż ta druga metoda jest również popularna. Jego zaletą jest to, że można go używać na stringach.
Jak powiedzieliśmy, typ char
jest również typem całkowitym, więc możesz go zapisać w ten sposób:
Kod | Wyjście na wyświetlaczu |
---|---|
|
Na ekranie zostanie wyświetlona litera łacińska B . Ponieważ: A - 65 B - 66 C -67 |
Praca z typemchar
Każdy znak char
to przede wszystkim liczba (kod znaku), a następnie znak. Znając kod znaku, zawsze możesz go uzyskać w programie. Przykład:
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
Standardowe kody
Oto najbardziej znane kody znaków:
Symbolika | Kody |
---|---|
0 , 1 , 2 , ...9 |
48 , 49 , 50 , ...57 |
a , b , c , ...z |
97 , 98 , 99 , ...122 |
A , B , C , ...Z |
65 , 66 , 67 , ...90 |
6. Wpiszboolean
A ostatnim typem pierwotnym jest boolean
.
Jak już wiesz, może przyjmować tylko dwie wartości: true
i false
.
Właściwie wszystko, co możesz wiedzieć o tym typie, już wiesz.
GO TO FULL VERSION