Pola klasy powinny być prymitywne czy nie?

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?

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

Czy powinno być tak:

public class MojaKlasa{
    private int a;
    private long b;
    private byte c;
}
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>

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.

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: C# vs Java - przetwarzenie dużych ilości danych. jest wątek w którym roztrząsane są różnice w wydajności między używaniem inta, a Integera.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1