Witam mam pytanie czemu w javie używamy boolean, int, double a nie ich class Boolean, Integer i inne. Poczytałem trochę dokumentacje i te klasy mają pełno fajnych metod.
Skąd wniosek, że „nie używamy”?
Ok, źle się wyraziłem ale w książkach na tutorialach zawsze jest int boolean ale nigdy ich klas. I stąd moje pytanie
Poczytaj se o typach primitywnych a obiektach. To są po prostu wrapery.
@87kelthuzad: bo naukę zaczyna się od rzeczy najbardziej podstawowych. ;)
Bo obiekty mają narzut zarówno na nagłówek obiektu jak i referencję do niego.
Na 64-bitowej Javie int
zajmuje 4 bajty, ale obiekt Integer
już 16 bajtów, przy czym każda referencja do tego obiektu zajmuje 64 bity czyli 8 bajtów.
te klasy mają pełno fajnych metod.
Klasa np java.lang.Integer ma więcej metod statycznych niż instancyjnych. Zrób sobie import static java.lang.Integer.*;
i potem możesz używać tych metod statycznych np compare(int1, int2)
.
Poza tym prymitywy mają jeszcze jedną fajną właściwość - nie da się do nich przypisać nulla, więc operując na nich nie dostaniemy NullPointerException.
<flame>Bo Java jest błędnie zaprojektowana.</flame> :)
koszalek-opalek napisał(a):
<flame>Bo Java jest błędnie zaprojektowana.</flame> :)
Znam tylko jeden język, gdzie int udaje klasę na etapie kompilacji, ale na etapie wykonania już nie - ten język to C#. Jaki to daje zysk? Że zamiast np abs(5) można napisać 5.abs(). Czy to jest jakiś wielki szał? No nie wiem, można popatrzeć do kodu C# i zobaczyć w ilu miejscach mamy wywołania metod na intach i innych prymitywach (czy jak kto tam woli prostych klasach wartościowych).
Wibowit napisał(a):
koszalek-opalek napisał(a):
<flame>Bo Java jest błędnie zaprojektowana.</flame> :)
Znam tylko jeden język, gdzie int udaje klasę na etapie kompilacji, ale na etapie wykonania już nie - ten język to C#. Jaki to daje zysk? Że zamiast np abs(5) można napisać 5.abs().
Zysk daje taki, że nie trzeba się zastanawiać gdzie ma być int
a gdzie Integer
.