W tym artykule jaki przygotowałem z serii o języku Java, napiszę co nieco o tym, jakie typy danych przyjmują jakie wartości domyślne w języku Java. Zdecydowana większość będzie składać się z tabelek, jednak parę słów komentarza nie zabraknie 😁. Zapraszam!
O TYM, DLACZEGO WARTO POZNAĆ WARTOŚCI DOMYŚLNE W JĘZYKU JAVA
Powiedzieliśmy sobie, że miejscem do przechowywania wartości jest zmienna. Było także o tym, że zmienną trzeba zdefiniować przed pierwszym użyciem. A tu proszę, zmienna przyjmuje wartość domyślną i nie wymaga przypisywania 😳? Nie wymaga, ale pod jednym warunkiem...
SKŁADOWA KLASY, A ZMIENNA LOKALNA
Wartości domyślne w języku Java otrzymają tylko te zmienne, które są częścią klasy! W przeciwnym wypadku, trzeba definiować wartość samodzielnie. Wystarczy zrobić prosty test i zaobserwować zachowanie samego kompilatora:
public class MyClass {
private int x;
public void doSomething() {
int y;
System.out.println(x);
System.out.println(y);
}
}
Wypisanie zmiennej "x" pójdzie bez zarzutu (to będzie 0). Próba wypisania wartości zmiennej "y" zakończy się błędem! Teraz standardowe pytanie: dlaczego?
Odpowiedź na to pytanie przynosi zaobserwowanie kluczowej różnicy kiedy zmienna znajduje się w klasie albo nie. Jeżeli przeczytałeś(-aś) artykuł o samych klasach, to wiesz już, że obiekt dysponuje własnym zestawem danych składowych (czyli zmiennych). Kiedy obiekt zostaje utworzony, z automatu inicjowane są wszystkie jego składowe (w tym zmienne), bo tylko wtedy obiekt zostanie "w pełni" utworzony - wyjątkiem będą instancje klas zawarte w innej instancji, one nadal potrzebują skorzystać z konstruktora. Zmienne lokalne deklarowane wewnątrz metody nie należą do żadnego "organizmu", są niezależnym bytem i dlatego wymagają z naszej strony inicjalizacji ręcznej.
PEŁNE ZESTAWIENIE WARTOŚCI DOMYŚLNYCH
Ołkej, teraz przedstawię wartości domyślne w języku Java jakie są przydzielane każdemu typowi danych z osobna. Tabelka w ruch 😝:
TYP DANYCH | WARTOŚĆ DOMYŚLNA |
byte | 0 |
short | |
int | |
long | |
float | 0.0 |
double | |
char | '\u0000' (znak pusty) |
boolean | false |
obiekt | null |
String |
Uprościłem pewne oznaczenia, gdyż są to szczegóły niemające znaczenia od strony wartości. Gdyby ktoś jednak był dociekliwy, to...
Dla "long" przyjmie wartość "0L". Litera 'L' jest oznaczeniem stosowanym podczas definiowania wartości całkowitoliczbowej wykraczającej poza zakres typu "int". Dla "float" będzie to 0.0 z końcówką "f" - sygnał dla kompilatora, że definiujesz wartość dla typu "float" (to ma znaczenie podczas przypisywania). "double" przyjmie 0.0, lecz z końcóweczką "d". Musisz nauczyć się przypisywać właściwy sufiks dla odpowiedniego typu.
"char", typ znakowy, otrzyma znak pusty, lecz nie jest to wartość "null" sama w sobie! Pojawi się znak, lecz będzie on niewidoczny. Nosi nazwę "null terminator". Pochodzi z języka C i jest wykorzystywany jako znak końcowy łańcucha. Każdy obiekt, który nie został utworzony przy pomocy konstruktora, przyjmie wartość "null". Łańcuch znaków też. Jeżeli to wywołuje zdziwienie, to przypomnę, że "String" jest także typem danych wykorzystującym referencję! Żeby pojąć dlaczego, trzeba poznać korzenie łańcuchowego typu danych z języka C 🙃.
Wartości domyślne w języku Java przypisywane są automatycznie danym składowym instancji klas i nie potrzebują jawnej definicji wartości. Taka jest niezbędna dla zmiennych lokalnych występujących jedynie w obrębie metody.
Więcej istotnych informacji nie trzeba jak na artykuł, to wszystko 😄!