Pola klasy powinny być prymitywne czy nie?

Pola klasy powinny być prymitywne czy nie?
GarryMoveOut
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 59
0

W przykładach na Internecie czy książkach pola klasy są typy prymitywnego int natomiast prowadzący w swoich kodach używa Integer Moim zdaniem jest to błąd chociaż moim jedynym argumentem jest to że w przykładach dokumentacji Oracle używa się pól prymitywnych. Jakiego typu powinny być pola klas, dlaczego i kiedy?

Kopiuj
public class MojaKlasa{
    private Integer a;
    private Long b;
    private Byte c;
}

Czy powinno być tak:

Kopiuj
public class MojaKlasa{
    private int a;
    private long b;
    private byte c;
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Prymitywy są lżejsze od boxowanych typów i generalnie lepiej używać prymitywów. Ale pamiętaj ze java nie wspiera generyków na prymitywach więc czasem i tak trzeba robić autoboxing bo nie ma List<int>, jest tylko List<Integer>

testowy_user
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 160
2

Jeżeli nie masz potrzeby traktowania prymitywów jak obiektów (w tym również wspomniane generyki) to nie ma sensu wpychać Integera zamiast int'a.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Co do rozmiaru inta i Integera w pamięci:
http://stackoverflow.com/questions/8419860/integer-vs-int-with-regard-to-memory
http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

Integer w Javie od Oracle zajmie 16 bajtów. Do tego dochodzi rozmiar referencji do Integera - 4 albo 8 bajtów. int zajmuje 4 bajty. Różnica w zajętości pamięci jest więc 5 albo 6 krotna.

Oprócz zajętości pamięci dochodzi problem cache misses. Każde podążanie za wskaźnikiem skutkuje potencjalnym cache miss. Z drugiej strony sekwencyjne skanowanie pamięci bądź dostęp do elementów z tej samej linii pamięci podręcznej (cache line - 64 bajty, które współdzielą wszystkie bity w adresie oprócz najniższych sześciu). Ze względów wydajnościowych bardzo opłaca się więc używać intów, a nie Integerów.

Tutaj: https://4programmers.net/Forum/Newbie/283884-c_vs_java_przetwarzenie_duzych_ilosci_danych jest wątek w którym roztrząsane są różnice w wydajności między używaniem inta, a Integera.

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
0

poza tym wrappery mogą być nulami dlatego mogą być przydatne w encjach ORMowych

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.