2008-12-03 13 views
5

Widziałem to zdanie w niektórych matrials:prostych zmiennych w Java i C++

„w Javie, proste typy danych, takie jak int i char działają tak samo jak w C”

Zastanawiam się, że w rzeczywistości są one różne w Javie & C++?

W C++ proste zmienne, takie jak prymitywy w Javie, są również przypisywane adresowi pamięci, więc te prymitywne typy w C++ mogą mieć również wskaźnik. Jednak prymitywom w Javie nie przypisano adresu pamięci takiego jak Obiekty.

Czy mam rację?

Dzięki!

+0

Zobacz http://stackoverflow.com/questions/564/what-is-the-difference-between-an-int-and-an-integer-in-javac – bradtgmurray

Odpowiedz

7

Prawie.

W prymitywach java są również przypisywane pamięci, ale dzieje się to wewnętrznie i nie można uzyskać odwołania.

Powodem było zapewnienie bezpieczeństwa zarządzania pamięcią.

-1

Prymitywy są przechowywane na stosie i są przekazywane według wartości.

int x = 5; 
int y = x; 

y++; 

// y = 6 
// x = 5 

Obiekty są przechowywane na stercie i przekazywane przez odniesienie.

Object a = new Object(); 
Object b = a; 

b.someAction(); 

// A and B point to the same object and both have had the 'someAction()' performed 

nie mam pojęcia, czy to, co się pytam, ale jestem znudzony i chce pisać coś

+0

Nie masz tego do tyłu? Prymitywy są przydzielane na stos, który myślałem. – bradtgmurray

+0

Lol, ups! Tak. Edycja. –

+0

Obiekty nie są przekazywane przez odniesienie. Odniesienia do obiektów są przekazywane według wartości. Zobacz http://stackoverflow.com/questions/333151. Ponadto prymitywy są przechowywane tylko na stosie, jeśli są to zmienne lokalne. –

0

Istnieje kilka różnic między Java i C++, jeśli chodzi o prostych typów . Przydzielanie pamięci jest inne, ponieważ Java ukrywa koncepcję wyraźnych wskaźników i odniesień. Po prostu stwórz prosty typ i przypisz mu wartość. Inną różnicą jest to, że Java używa standardowych śladów pamięci dla każdego prostego sprawdzania typu Java Simple Types. Z kolei C++ jest zależne od platformy, na której jest kompilowany. Kolejną kwestią (i nie wiem, czy to różnica, czy nie) jest to, że przypisanie do prostych typów jest bezpieczne dla wątków. Nie napisałem programowania wielowątkowego w C++, więc nie jestem pewien, czy to jest kwestia rozważań.

+0

Przypisanie do długich lub podwójnych nie może być atomowe, chyba że jest niestabilne (i nawet wtedy prawdopodobnie implementacja jest zepsuta). Zmiana niekoniecznie jest automatycznie widoczna dla innych wątków (chyba że są to agresywne agains). Operacje takie jak ++ nie są atomowe - używaj AtomicInteger i przyjaciół. –

0

W przypadku większości podstawowych rzeczy działają one tak samo, ale istnieje wiele różnic w szczegółach.

  • Brak niepodpisane typy numeryczne w Javie (z wyjątkiem char, który technicznie ale nie semantycznie numeryczna)
  • „prymitywne typy” Java mogą żyć tylko na stosie (jako zmienne lokalne) lub wewnątrz obiektów na stercie , ale nie bezpośrednio na stercie.
  • Typ znaku jest bardzo różny - w C jest zdefiniowany jako jeden bajt (bajt może mieć 8 bitów lub nie), podczas gdy w języku Java jest 16-bitowy.
0

Prawidłowo.

W języku java nie można przekazać odwołania (wskaźnika) do typu pierwotnego. // Infact nie ma czegoś takiego jak wskaźniki w Javie.

Typ pierwotny można przekazywać tylko według wartości w Javie. Jest na to sposób, ale zazwyczaj nie jest to zalecane, chyba że wymaga tego sytuacja. Możesz użyć klasy opakowania. When to use wrapper class and primitive type

Tylko obiekty są przekazywane przez odniesienie.

Również typy prymitywne są przydzielane na stosie, a obiekty są przydzielane na stercie.

Powiązane problemy