1. Typ tablicyString
Krótko mówiąc, chciałbym porozmawiać o tablicy typu String
.
Jak powiedzieliśmy, tablica może być dowolnego typu. Możesz więc utworzyć tablicę typu String
. Tak wyglądałby kod, gdybyśmy napisali program, który „wprowadza z klawiatury 10 wierszy i wyświetla je na ekranie w odwrotnej kolejności”.
|
Utworzyć obiekt Scanner Utworzyć tablicę z 10 elementami Zapętlić od 0 do 9 Odczytać ciąg znaków z klawiatury i zapisać w następnej komórce tablicy Zapętlić od 9 do 0 Wyświetlić następną komórkę tablicy |
Kod niewiele się zmienił! Musiałem tylko zamienić typ int
na String
. Cóż, czytając linię z klawiatury, zamień metodę nextInt()
na nextLine()
.
2. Tablica typu String
w pamięci
I jeszcze jeden przydatny fakt. Rozważ 3 zdjęcia:
Rysunek 1. Jak obiekt String
znajduje się w pamięci:
To zdjęcie pochodzi z poprzednich wykładów.
Należy pamiętać, że tekst wiersza nie jest przechowywany bezpośrednio w zmiennej: jest dla niego przydzielony oddzielny blok pamięci. A zmienna typu String
przechowuje adres (referencję) do obiektu z tekstem.
Rysunek 2. Jak tablica liczb całkowitych jest umieszczona w pamięci:
Znany jest również obraz.
Zdjęcie 3 . Jak tablica ciągów znaków jest przechowywana w pamięci:
Po lewej stronie widzimy zmienną typu array String[]
(przechowuje adres obiektu array).
W środku znajduje się obiekt array typu String
.
A po prawej stronie znajdują się obiekty łańcuchowe, które przechowują niektóre teksty.
Komórki obiektu typu array String
przechowują nie same napisy (teksty), ale ich adresy (linki). W taki sam sposób jak String
adresy linii (tekst) są przechowywane w zmiennych typu.
Należy o tym pamiętać podczas porównywania komórek macierzy:
|
Utwórz tablicę 10 wierszy Wprowadź wartości w tablicy true (referencje są równe) false (referencje nie są równe)true (wiersze są równe) true (ciągi są nadal równe) |
3. Szybka inicjalizacja macierzy w Javie
Tablice są bardzo przydatną rzeczą, dlatego programiści Java starali się, aby praca z nimi była jak najbardziej wygodna.
Pierwszą rzeczą, którą zrobili, było uproszczenie inicjalizacji tablicy, wprowadzając do niej wartości początkowe.
W końcu bardzo często oprócz danych, które program skądś odczytuje, do działania potrzebuje również własnych danych wewnętrznych. Na przykład musimy przechowywać w tablicy długości wszystkich miesięcy. Jak może wyglądać ten kod:
int[] months = new int[12];
months[0] = 31; // январь
months[1] = 28; // февраль
months[2] = 31; // март
months[3] = 30; // апрель
months[4] = 31; // май
months[5] = 30; // июнь
months[6] = 31; // июль
months[7] = 31; // август
months[8] = 30; // сентябрь
months[9] = 31; // октябрь
months[10] = 30; // ноябрь
months[11] = 31; // декабрь
Ale jest sposób, aby napisać to krócej - dzięki twórcom Javy:
// длины месяцев года
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Możesz po prostu wyświetlić wszystkie wartości tablicy oddzielone przecinkami!
Wygodne, prawda? Ale to nie wszystko.
Okazuje się, że kompilator może określić typ kontenera (obiektu tablicowego) na podstawie typu zmiennej tablicowej. Aby określić długość tablicy, policzenie elementów zapisanych w nawiasach klamrowych jest banalne.
Dlatego ten kod można zapisać jeszcze krócej:
// длины месяцев года
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Czy to nie piękno? 🙂
Ta notacja nazywa się „szybką inicjalizacją tablicy”. Nawiasem mówiąc, działa to nie tylko dla typu int
...
// имена месяцев года
String[] months = { "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"};