2015-04-18 16 views
5

Przyjmuję struktury danych i analizy. Przeanalizowaliśmy sposób, w jaki przypisywanie i porównywanie typów obiektów jest znacznie wolniejsze niż przypisywanie i porównywanie podstawowych typów, takich jak int.Czy wskaźniki Java są "liczbami całkowitymi"?

Przypominam uczenie się C (wszystkie te prawie trzydzieści lat temu) i jak wskaźniki w C są (lub były) integerami. Java jest podobna dzisiaj, jest nawiązaniem do instancyjnej obiektu wewnętrznie adresem całkowitej pamięci, i jako takie są porównania takie jak

if (MyObject != null) {...} 

operacja całkowitą ramach?

Mam nadzieję, że moje pytanie jest jasne. Badałem i nie mogę znaleźć jasnej odpowiedzi na pytanie, w jaki sposób Java zarządza swoją pamięcią dynamiczną.

+1

Uważam, że ten wpis jest niebezpiecznie zagmatwany. Wydaje się, że insynuujesz, że "porównanie obiektów jest powolne" i że porównywanie wskaźników jest szybkie, a zatem lepsze. Ale to są zupełnie różne rzeczy. Jedna dotyczy równości wartości, a druga dotyczy tożsamości obiektu. Aby dać analogię w Pythonie, jeden jest o "99 == 99", a drugi o "301 jest 301" –

+0

Nie insynuuję, pytam. Dzięki za wkład. – failure

+0

Wszystkie wartości w Javie to "liczby całkowite" wewnętrznie, w tym liczby zmiennoprzecinkowe. Chodzi o to, jak są interpretowane. Ale mylicie się porównując * wskaźniki * z porównywaniem * obiektów * wskazanych - dwie zupełnie różne rzeczy. Porównanie dwóch "wskaźników" Javy (referencje) z "==" jest około tak szybkie, jak porównanie dwóch * długich * wartości. –

Odpowiedz

3

Krótka odpowiedź brzmi: tak, odniesienie do obiektu jest przechowywana jako wskaźnik, jak to jest w C

Nie jestem pewien co masz na myśli przez przechowywana jako „całkowitą”, ale jeśli to, co chcesz, aby wykonaj operację na nich, tak jak możesz to zrobić w C (np. dodaj liczbę całkowitą do wskaźnika itp.), wtedy nie możesz z Javą.

Co do reszty, to prawie to samo, z tym, że jest obsługiwane przez Javę.

na trasę 4.3.1 określa, że ​​odniesienie do obiektu jest przechowywana jako wskaźnik:

Wartości odniesienia (często po prostu odniesienia) są wskaźnikami do tych obiektów, a specjalną informacją zerowa, co odnosi się do brak obiektu.

+0

W C, oryginalne, pre-ANSI C, wskaźniki były liczbami całkowitymi, a zatem operacje na wskaźnikach, w szczególności przydział, są tak szybkie, jak operacja na liczbie całkowitej. Nie szukam bezpośredniej kontroli, jestem po prostu ciekawa, jakie są ogólne koszty takich operacji. Dzięki! – failure

+0

@failure Nie ma za co. –

Powiązane problemy