Poprawnie wskazana została zmienna 'zm3', której typ to 'char'. To właśnie zmienne typu 'char' w Javie służą do przechowywania pojedynczych znaków, takich jak na przykład litera 'T'. Zmienna 'char' przechowuje znak jako wartość liczbową zgodnie z kodowaniem Unicode, co pozwala na obsługę szerokiego zakresu znaków z różnych alfabetów. W praktyce często spotyka się sytuacje, gdzie potrzebujemy przechować czy odczytać pojedynczy znak – np. literę przy przetwarzaniu tekstu, analizowaniu plików, czy nawet w prostych grach tekstowych, gdzie np. sterowanie postacią opiera się o pojedyncze litery wciskane na klawiaturze. Moim zdaniem dobre zrozumienie typu 'char' to podstawa, bo łatwo pomylić go z typem 'String', który przechowuje jednak całe ciągi znaków, a nie pojedyncze znaki. Z punktu widzenia dobrych praktyk, zawsze warto dobierać możliwie najwęższy typ danych do zadania – jeżeli chcemy przechować jedną literę, typ 'char' jest po prostu najefektywniejszy. Nawiasem mówiąc, w Javie znak umieszczamy w pojedynczych apostrofach (np. 'T'), co jednoznacznie odróżnia je od tekstów (podwójne cudzysłowy). Osobiście zdarzało mi się kiedyś pomylić te typy i potem szukać błędów, więc warto zapamiętać tę różnicę. Warto też wiedzieć, że typ 'char' przydaje się np. do operacji na znakach w tablicach, przy konwersjach kodów ASCII czy nawet szyfrowaniu prostych tekstów. Zdecydowanie jest to typ, którego nie można pominąć w nauce Javy.
Z perspektywy programowania w Javie, wybór nieprawidłowego typu zmiennej do przechowywania pojedynczego znaku, takiego jak 'T', wynika najczęściej z niejasnego rozróżnienia między typami prostymi oraz nieznajomości ich przeznaczenia. Typ 'int' przechowuje liczby całkowite, np. 5, -100, 0, i nie nadaje się do przechowywania znaków, mimo że za pomocą przekształceń można uzyskać kod liczbowy znaku (np. 'A' jako 65), ale to zupełnie inny kontekst. Niejednokrotnie początkujący mylą typ 'char' z 'int' właśnie z powodu tej numerycznej reprezentacji, jednak w praktycznym zastosowaniu – kiedy naszym zadaniem jest operowanie na znakach, nie na ich kodach – 'char' jest właściwym wyborem. Z kolei typ 'float' przechowuje liczby zmiennoprzecinkowe, a więc wartości takie jak 3.14 czy -0.01. Przypisanie do niego znaku jest niemożliwe bez nieintuicyjnych konwersji i najczęściej prowadzi do błędów kompilacji lub nieczytelnego kodu. Często widzę, że ktoś próbuje „upchnąć” znak w typie liczbowym, bo myśli, że 'wszystko to przecież liczby' – to jednak nieporozumienie. Typ 'boolean' natomiast przechowuje jedynie dwa stany: true lub false, a zatem absolutnie nie może służyć do przechowywania znaków. Próbując przypisać znak do zmiennej boolean, dostaniemy błąd już na etapie kompilacji. W branży promuje się zasadę doboru typu danych do ich faktycznego zastosowania, a w przypadku pojedynczego znaku – zawsze należy użyć 'char'. Ignorowanie tego prowadzi do błędów, trudniejszych do wychwycenia w złożonym kodzie. Z mojej perspektywy, warto poświęcić chwilę na dobre zrozumienie tej różnicy, bo to procentuje później w pracy z kodem i ułatwia implementację rozwiązań zgodnych ze standardami Javy, a także sprawia, że kod jest czytelniejszy i bardziej przewidywalny dla innych programistów.