CodeGym /Kursy /JAVA 25 SELF /Liczby i znaki w Javie

Liczby i znaki w Javie

JAVA 25 SELF
Poziom 6, Lekcja 1
Dostępny

1. Jakie są rodzaje liczb?

W programowaniu nieustannie pracujemy z liczbami — od wieku użytkownika po liczbę gwiazd w galaktyce czy groszy na koncie bankowym. Jednak różne zadania wymagają różnych rodzajów liczb: czasem ważne jest przechowywanie tylko liczb całkowitych, czasem — bardzo dokładnych ułamków, a czasem potrzebne są liczby „bez minusów”.

Liczby całkowite (int i inne)

Liczba całkowita to liczba bez części ułamkowej.
W Javie najczęściej używa się typu int, ale oprócz niego istnieje kilka wariantów różniących się rozmiarem i zakresem.

  • int — podstawowy „roboczy” typ dla liczb całkowitych. Mieści bardzo duże (i małe) wartości, a pamięci zajmuje niezbyt dużo. Na przykład do zliczania polubień, wieku, liczby dni w roku prawie zawsze użyjesz int.
  • long — używany, gdy wartości mogą być bardzo duże (np. miliardy lub biliony). Przykład: przechowywanie sumy wszystkich wyświetleń na YouTube w całej historii.
  • short — oszczędny, lecz rzadko używany typ. Nadaje się tam, gdzie występuje wiele powtarzalnych małych wartości (np. dane audio, składowe kolorów).
  • byte — dla jeszcze mniejszych wartości, zwłaszcza w grafice i pracy z plikami, gdzie liczy się oszczędność pamięci.

Liczby zmiennoprzecinkowe (double, float)

Czasem trzeba pracować z liczbami mającymi część ułamkową. Na przykład temperatura powietrza, średnia ocena studenta, cena towaru z groszami.

  • double — typ „domyślny” do przechowywania liczb zmiennoprzecinkowych. Wystarczająco dokładny dla większości obliczeń (np. 3.1415926535…).
  • float — lżejszy i mniej dokładny typ; częściej spotykany w zadaniach grafiki komputerowej lub przy przetwarzaniu dużych tablic danych, gdzie ważna jest oszczędność pamięci.

Specjalne typy liczbowe

  • BigInteger — gdy trzeba pracować z ogromnymi liczbami, przekraczającymi standardowe zakresy, np. w kryptografii lub obliczeniach w astronomii.
  • BigDecimal — klasa do precyzyjnych obliczeń na liczbach zmiennoprzecinkowych (finanse, kalkulacja procentów); pomaga uniknąć niedokładności typowych dla double i float.

2. Zakresy wartości

Typy całkowite mogą przechowywać zarówno liczby dodatnie, jak i ujemne. To wygodne, gdy wartości mogą być „i powyżej, i poniżej zera”: na przykład temperatura, saldo konta, wysokość względem poziomu morza.

Przykład:

  • int : -10, 0, 50
  • long : 0, 10, -1000_000_000_000_000_000L

Typy całkowite

Typ Rozmiar Zakres wartości Przykład użycia
byte
1 bajt -128 do 127 -128, 0, 127
short
2 bajty -32 768 do 32 767 -1000, 0, 32000
int
4 bajty -2 147 483 648 do 2 147 483 647 -1000000, 0, 2000000
long
8 bajtów -9 223 372 036 854 775 808
do 9 223 372 036 854 775 807
-10_000_000_000, 1

Typy zmiennoprzecinkowe

Typ Rozmiar Przykłady wartości Opis
float
4 bajty 3.14f, -0.001f pojedyncza precyzja (7 cyfr)
double
8 bajtów 3.1415, -1.7E+308 podwójna precyzja (15–16 cyfr)

3. Sufiksy liczbowe

W niektórych sytuacjach trzeba jawnie wskazać, jakiego typu chcesz użyć dla liczby. Robi się to za pomocą sufiksów:

  • L lub l — dla typu long (np. 10000000000L)
  • F lub f — dla typu float (np. 3.14f)
  • D lub d — dla typu double (zwykle zbędny, ponieważ liczby zmiennoprzecinkowe bez sufiksu to double)

Jeśli nie podasz sufiksu, to domyślnie liczba całkowita jest traktowana jako int, a zmiennoprzecinkowa — jako double. Na przykład, 42 to int, a 3.14 to double.

Po co to jest potrzebne? Na przykład, aby nie dostać błędu przy przypisaniu dużej liczby do zmiennej typu long:

long bigNumber = 9000000000L; // jeśli usuniesz L, będzie błąd kompilacji

Separator w postaci podkreślenia _

Gdy liczby są długie, łatwo się pogubić w zerach. Dla urody i wygody czytania w Javie można używać podkreśleń wewnątrz liczby.

int population = 146_700_000;
long stars = 100_000_000_000L;
Użycie podkreśleń dla czytelności liczb

To w pełni legalne: kompilator ignoruje podkreślenia, a Tobie wygodnie od razu „na oko” widzieć rzędy. Najważniejsze — nie stawiać podkreślenia na początku, na końcu, po kropce ani przed sufiksem.

4. Typ znakowy char: co to jest i po co?

Typ char służy do przechowywania jednego znaku: litery, cyfry, znaku interpunkcyjnego, spacji, znaku specjalnego, a nawet buźki.

Przykłady:

char letter = 'A';
char digit = '7';
char symbol = '?';
char cyrillic = '\u0416';
char euro = '€';
char smile = '☺'; // Tak, to też jest możliwe!

Ważne zasady:

  • Wartość typu char zapisuje się w pojedynczych cudzysłowach: 'A', '7', '#'.
  • To dokładnie jeden znak! Jeśli napiszesz 'AB' — kompilator zaprotestuje.
  • Za każdym znakiem kryje się jego kod liczbowy (Unicode).

Unicode: znaki z całego świata

Java używa standardu Unicode, co pozwala przechowywać nie tylko litery łacińskie, ale też cyrylicę, ideogramy, emoji, a nawet staroegipskie hieroglify (gdyby zaszła taka potrzeba).

Ciekawostka:
Typ char to w istocie 16-bitowa liczba (od 0 do 65535), gdzie każdej wartości odpowiada jakiś znak.

5. Znaki i liczby: powiązanie przez Unicode

Ponieważ każdy znak wewnątrz to liczba, możemy swobodnie przekształcać char do int i z powrotem.

Przykład: odczytać kod Unicode znaku

public class CharToInt {
    public static void main(String[] args) {
        char ch = 'A';
        int code = ch; // Niejawne przekształcenie char → int

        System.out.println("Kod znaku '" + ch + "': " + code);
    }
}

Wynik:

Kod znaku 'A': 65

A teraz odwrotnie — uzyskać znak na podstawie kodu:

public class IntToChar {
    public static void main(String[] args) {
        int code = 1040; // Kod litery '\u0410' w Unicode (cyrylica)
        char ch = (char) code; // Jawne przekształcenie int → char

        System.out.println("Znak o kodzie " + code + ": " + ch);
    }
}

Wynik:

Znak o kodzie 1040: \u0410

6. Podstawowe typy prymitywne Javy

Typ Rozmiar (bity) Zakres wartości Przykład wartości Uwaga
byte
8 -128 ... 127 42 Używany bardzo rzadko
short
16 -32,768 ... 32,767 12345 Dla oszczędności pamięci
int
32 -2,147,483,648 ... 2,147,483,647 1000000 Podstawowy dla liczb całkowitych
long
64 ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 5000000000L Do bardzo dużych liczb całkowitych
float
32 ~±3.4 × 10-38 ... ±3.4 × 1038 3.14f Liczby zmiennoprzecinkowe, niska precyzja
double
64 ~±1.7 × 10-308 ... ±1.7 × 10308 2.718 Liczby zmiennoprzecinkowe, wysoka precyzja
char
16 0 ... 65 535 (Unicode) '\u0416', 'A', '?' Jeden znak
boolean
1 true, false true Wartość logiczna
1
Zadanie
JAVA 25 SELF, poziom 6, lekcja 1
Niedostępne
Tworzenie ekwipunku dla bohatera RPG 🎮
Tworzenie ekwipunku dla bohatera RPG 🎮
1
Zadanie
JAVA 25 SELF, poziom 6, lekcja 1
Niedostępne
Liczenie skarbów w smoczym legowisku 🐉
Liczenie skarbów w smoczym legowisku 🐉
1
Zadanie
JAVA 25 SELF, poziom 6, lekcja 1
Niedostępne
Odszyfrowanie pradawnych run 🔮
Odszyfrowanie pradawnych run 🔮
1
Zadanie
JAVA 25 SELF, poziom 6, lekcja 1
Niedostępne
Dwukierunkowa magia znaków i liczb ✨
Dwukierunkowa magia znaków i liczb ✨
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION